浅谈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使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
使用Python脚本将Bing的每日图片作为桌面的教程
May 04 Python
python 远程统计文件代码分享
May 14 Python
python使用pycharm环境调用opencv库
Feb 11 Python
python Django 创建应用过程图示详解
Jul 29 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
opencv3/C++图像像素操作详解
Dec 10 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
pytorch 预训练模型读取修改相关参数的填坑问题
Jun 05 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
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
Python使用Scrapy爬取妹子图
2015/05/28 Python
python实现SMTP邮件发送功能
2020/06/16 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
使用python编写监听端
2018/04/12 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
python的Jenkins接口调用方式
2020/05/12 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
五一手机促销方案
2014/03/08 职场文书
贺卡寄语大全
2014/04/11 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
努力学习演讲稿
2014/05/10 职场文书
篝火晚会策划方案
2014/05/16 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js