浅谈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新手实现2048小游戏
Mar 31 Python
python中模块的__all__属性详解
Oct 26 Python
python+opencv实现动态物体追踪
Jan 09 Python
python学习之hook钩子的原理和使用
Oct 25 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
Django用户认证系统 User对象解析
Aug 02 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
python中的Elasticsearch操作汇总
Oct 30 Python
Python自动创建Excel并获取内容
Sep 16 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 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
zf框架的校验器InArray使用示例
2014/03/13 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
一些常用的Javascript函数
2006/12/22 Javascript
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
Javascript 获取LI里的内容
2008/12/17 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
js数组去重的方法总结
2019/01/18 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
python算法学习之基数排序实例
2013/12/18 Python
Python实现的爬虫功能代码
2017/06/24 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
小区门卫工作职责
2013/12/14 职场文书
胡桃夹子观后感
2015/06/11 职场文书
vue ref如何获取子组件属性值
2022/03/31 Vue.js
Java实现注册登录跳转
2022/06/16 Java/Android