浅谈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 相关文章推荐
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
python简单实现获取当前时间
Aug 27 Python
python分块读取大数据,避免内存不足的方法
Dec 10 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
Python 的AES加密与解密实现
Jul 09 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
python实现简易学生信息管理系统
Apr 05 Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
Python依赖包迁移到断网环境操作
Jul 13 Python
解决c++调用python中文乱码问题
Jul 29 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通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
纯JavaScript实现的分页插件实例
2015/07/14 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
numpy中索引和切片详解
2017/12/15 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
Python中@property的理解和使用示例
2019/06/11 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
final, finally, finalize的区别
2012/03/01 面试题
应届毕业生的个人自我鉴定
2013/10/24 职场文书
函授自我鉴定
2013/11/06 职场文书
高中生毕业学习总结的自我评价
2013/11/14 职场文书
大学生入党思想汇报
2014/01/01 职场文书
测试工程师职业规划书
2014/02/06 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
2015年教研员工作总结
2015/05/26 职场文书