浅谈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实现的简单hangman游戏实例
Jun 28 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
django Admin文档生成器使用详解
Jul 22 Python
Django Rest framework权限的详细用法
Jul 25 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
Aug 12 Python
python支付宝支付示例详解
Aug 22 Python
Django实现列表页商品数据返回教程
Apr 03 Python
如何学习Python time模块
Jun 03 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
Django生成数据库及添加用户报错解决方案
Oct 09 Python
Python日志模块logging用法
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
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
功能强大的php文件上传类
2016/08/29 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
python处理xml文件的方法小结
2017/05/02 Python
Python金融数据可视化汇总
2017/11/17 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
机电工程学生自荐信范文
2013/12/07 职场文书
公立医院改革实施方案
2014/03/14 职场文书
倡议书格式
2014/08/30 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
python 中[0]*2与0*2的区别说明
2021/05/10 Python
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫