浅谈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多进程Multiprocessing
Aug 29 Python
微信跳一跳小游戏python脚本
Jan 05 Python
python自动化报告的输出用例详解
May 30 Python
django 实现电子支付功能的示例代码
Jul 25 Python
python3安装speech语音模块的方法
Dec 24 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
django 多数据库及分库实现方式
Apr 01 Python
python3 配置logging日志类的操作
Apr 08 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
在Django中使用MQTT的方法
May 10 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 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安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
关于PHP定时发送服务的解决办法
2017/04/23 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
JavaScript 监听组合按键思路及代码实现
2020/07/28 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python目录与文件名操作例子
2016/08/28 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
struct和class的区别
2015/11/20 面试题
如何提高MySql的安全性
2014/06/19 面试题
创建服务型党组织实施方案
2014/02/25 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
党员志愿者活动总结
2014/06/26 职场文书
公司授权委托书范文
2014/08/02 职场文书
大学生操行评语大全
2014/12/31 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
竞聘书的秘诀
2019/04/02 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers