浅谈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转换为xml/json/table并输出的实现代码
Aug 28 Python
python实现超简单的视频对象提取功能
Jun 04 Python
Python 从相对路径下import的方法
Dec 04 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
python函数声明和调用定义及原理详解
Dec 02 Python
Python django框架开发发布会签到系统(web开发)
Feb 12 Python
Python内置函数locals和globals对比
Apr 28 Python
python实现ROA算子边缘检测算法
Apr 05 Python
Django一小时写出账号密码管理系统
Apr 29 Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 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正则
2006/07/07 PHP
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
php中动态修改ini配置
2014/10/14 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
基于numpy中数组元素的切片复制方法
2018/11/15 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
Python对excel的基本操作方法
2021/02/18 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
镇班子对照检查材料思想汇报
2014/09/24 职场文书
母亲节寄语大全
2015/02/27 职场文书