浅谈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 __dict__与dir()的区别详解
Oct 30 Python
python requests爬取高德地图数据的实例
Nov 10 Python
利用Python实现微信找房机器人实例教程
Mar 10 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
Django命名URL和反向解析URL实现解析
Aug 09 Python
python多维数组分位数的求取方式
Mar 03 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
TensorFlow的reshape操作 tf.reshape的实现
Apr 19 Python
使用Python构造hive insert语句说明
Jun 06 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 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/06/18 PHP
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JavaScript转换与解析JSON方法实例详解
2015/11/24 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Python中Collection的使用小技巧
2014/08/18 Python
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
django实现类似触发器的功能
2019/11/15 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
10张动图学会python循环与递归问题
2021/02/06 Python
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
同学聚会老师邀请函
2014/01/28 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
农业开发项目建议书
2014/05/16 职场文书
开学随笔
2015/08/15 职场文书
Python进行区间取值案例讲解
2021/08/02 Python
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android