浅谈python中字典append 到list 后值的改变问题


Posted in Python onMay 04, 2018

看一个例子

d={'test':1}
d_test=d
d_test['test']=2
print d

如果你在命令行实践的话,会发现你改动的是d_test ,但是d 也跟着改变了。

通常这和我们期待的不一样。

Why?

因为字典d 是一个object ,而d_test=d并没有真正的将该字典在内存中再次创建。只是指向了相同的object。这也是python 提高性能,优化内存的考虑。

实际场景

d={"name":""}
l=[]
for i in xrange(5):
  d["name"]=i
  l.append(d)
print l

loop 后可能跟你想要的结果并不相同。

即使append到list 中,但是,list中存放的也是一个对象,或者说是字典的地址。而非内存中真正的存储空间。

使用 .copy()方法。可以创建一个新的独立的字典

d={"name":""}
l=[]
for i in xrange(5):
  test=d.copy()
  test["name"]=i
  l.append(test)
print l

更新:

a={'q':1,'w':[]}
b=a.copy()
b['q']=2
b['w'].append(123)
print a
print b

这个时候发现a中'q'的值不会变化但是其列表中的值还是发生了改变

因为copy是浅层次copy

但是这里有个track

a={'q':1,'w':[]}
b=a.copy()
b['q']=2
b['w']=[123]
print a
print b

直接赋值的话,则不会改变a中的结构(多半是append这个方法的关系)

深层次的copy

import copy
a={'q':1,'w':[]}
b=copy.deepcopy(a)

以上这篇浅谈python中字典append 到list 后值的改变问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python3实现UDP协议的服务器和客户端
Jun 14 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Django如何配置mysql数据库
May 04 Python
python验证码识别教程之利用滴水算法分割图片
Jun 05 Python
django解决跨域请求的问题详解
Jan 20 Python
python绘制多个子图的实例
Jul 07 Python
python生成器推导式用法简单示例
Oct 08 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
python实现串口通信的示例代码
Feb 10 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
Python argparse模块使用方法解析
Feb 20 Python
Python 文字识别
May 11 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 #Python
对python中的pop函数和append函数详解
May 04 #Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 #Python
对python append 与浅拷贝的实例讲解
May 04 #Python
浅谈Python中重载isinstance继承关系的问题
May 04 #Python
对Python 2.7 pandas 中的read_excel详解
May 04 #Python
Python3读取Excel数据存入MySQL的方法
May 04 #Python
You might like
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
JavaScript中的this机制
2016/01/30 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
将python代码和注释分离的方法
2018/04/21 Python
matplotlib实现区域颜色填充
2019/03/18 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
python英语单词测试小程序代码实例
2019/09/09 Python
python如何保存文本文件
2020/06/07 Python
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
大学学生会竞选演讲稿
2014/04/25 职场文书
IT工程师岗位职责
2014/07/04 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
教学督导岗位职责
2015/04/10 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
详解JVM系列之内存模型
2021/06/10 Javascript
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸