浅谈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实现方法
Nov 18 Python
浅谈python抛出异常、自定义异常, 传递异常
Jun 20 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python遍历pandas数据方法总结
Feb 09 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
python 实现任务管理清单案例
Apr 25 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
教你怎么用python爬取爱奇艺热门电影
May 20 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 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的debug相关函数用法示例
2016/07/11 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
python 数据加密代码
2008/12/24 Python
python封装对象实现时间效果
2020/04/23 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python3个性签名设计实现代码
2018/06/19 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
澳大利亚最大的在线美发和美容零售商之一:My Hair Care & Beauty
2019/08/24 全球购物
SQL面试题
2013/04/30 面试题
简述数据库的设计过程
2015/06/22 面试题
大学生护理专业自荐信
2013/10/03 职场文书
租房协议书范文
2014/08/20 职场文书
师德师风剖析材料
2014/09/30 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
详解Java实践之抽象工厂模式
2021/06/18 Java/Android