浅谈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 相关文章推荐
一个检测OpenSSL心脏出血漏洞的Python脚本分享
Apr 10 Python
Python实现将n个点均匀地分布在球面上的方法
Mar 12 Python
python通过socket查询whois的方法
Jul 18 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
python 输出上个月的月末日期实例
Apr 11 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
python实现坦克大战
Apr 24 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
virtualenv介绍及简明教程
Jun 23 Python
Python常用数据分析模块原理解析
Jul 20 Python
Python 内存管理机制全面分析
Jan 16 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
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
javascript 实用的文字链提示框效果
2010/06/30 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
给女儿的表扬信
2014/01/18 职场文书
商场主管竞聘书
2014/03/31 职场文书
消防宣传口号
2014/06/16 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
男方婚礼答谢词
2015/01/20 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
深入解析MySQL索引数据结构
2021/10/16 MySQL