浅谈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的ORM框架SQLObject入门实例
Apr 28 Python
python发送HTTP请求的方法小结
Jul 08 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
python执行精确的小数计算方法
Jan 21 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
python每5分钟从kafka中提取数据的例子
Dec 23 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Python自动化测试笔试面试题精选
Mar 12 Python
Django ValuesQuerySet转json方式
Mar 16 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框架排名
2013/07/04 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
php生成excel列名超过26列大于Z时的解决方法
2014/12/29 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
JS 实现双色表格实现代码
2009/11/24 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
跟老齐学Python之做一个小游戏
2014/09/28 Python
用C++封装MySQL的API的教程
2015/05/06 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
环保公益广告语
2014/03/13 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
redis 查看所有的key方式
2021/05/07 Redis