浅谈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入门篇之数字
Oct 20 Python
python使用mailbox打印电子邮件的方法
Apr 30 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 Python
分享vim python缩进等一些配置
Jul 02 Python
python实现Virginia无密钥解密
Mar 20 Python
详解Python 函数如何重载?
Apr 23 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 Python
OpenCV-Python实现轮廓拟合
Jun 08 Python
使用Django框架创建项目
Jun 10 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输出日历表代码实例
2015/03/27 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
javascript css styleFloat和cssFloat
2010/03/15 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
基于keras中的回调函数用法说明
2020/06/17 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
存储过程的优缺点是什么
2015/01/10 面试题
毕业生自我鉴定
2013/11/05 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
联欢会开场白
2015/06/01 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS