浅谈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 相关文章推荐
Python对小数进行除法运算的正确方法示例
Aug 25 Python
Python中的生成器和yield详细介绍
Jan 09 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
python爬取个性签名的方法
Jun 17 Python
python中强大的format函数实例详解
Dec 05 Python
python实现大转盘抽奖效果
Jan 22 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
python学生信息管理系统实现代码
Dec 17 Python
python实现ftp文件传输功能
Mar 20 Python
Python如何省略括号方法详解
Mar 21 Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 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
PHP中SESSION的注销与清除
2015/04/16 PHP
WordPress网站性能优化指南
2015/11/18 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
python使用递归的方式建立二叉树
2019/07/03 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
Python测试模块doctest使用解析
2019/08/10 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
自我评价范文点评
2013/12/04 职场文书
护士实习生自我鉴定范文
2013/12/10 职场文书
精神文明建设标语
2014/06/16 职场文书
护理学专业求职信
2014/06/29 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
社区务虚会发言材料
2014/10/20 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android