浅谈python中字典append 到list 后值的改变问题
作者:katios 发布时间:2021-09-17 23:13:23
标签:python,list,append
看一个例子
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)
来源:https://blog.csdn.net/sinat_21302587/article/details/72356431


猜你喜欢
- 使用executemany对数据进行批量插入的话,要注意一下事项:#coding:utf8conn = MySQLdb.connect(ho
- 使用cpan安装Net::SSH::Perl:cpan>install Net::SSH::Perl期间遇到了一些问题,记录在此,以备
- 使用诸如Lock、RLock、Semphore之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现
- 1、字典中的键存在时,可以通过字典名+下标的方式访问字典中改键对应的值,若键不存在则会抛出异常。如果想直接向字典中添加元素可以直接用字典名+
- eval() 函数用来执行一个字符串表达式,并返回表达式的值。eval函数功能:将字符串str当成有效的表达式来求值并返回计算结果。eval
- 嗯,开场先胡扯几句不相关地感言。最近的工作让我有了很多实践的机会,同时也让我收获颇丰。在群里聊天的时候也提到过,所有的学习过程,最好是理论-
- 《色彩解答》系列之一 色彩层次这次我们将深入进去了解一下众多色彩在一起之后所存在的“比例”关系。我们在使用色彩的时候不可能把所有的色彩都做得
- 本文实例为大家分享了python遗传算法的具体代码,供大家参考,具体内容如下1、基本概念遗传算法(GA)是最早由美国Holland教授提出的
- 在这篇文章中,将向您展示如何使用Python链接目前主流的MongoDB(V3.4.0)数据库,主要使用PyMongo(v3.4.0)和Mo
- 目录func Containsfunc HasPrefixfunc HasSuffixfunc Replacefunc Splitfunc
- 1.字符串大小写转换string.title() #将字符串中所有单词的首字母以大写形式显示string.upper() #将字符串中所有字
- 描述符类要求:描述符就是将某种特殊类型的类的实例指派给另一个类的属性至少要实现以下的一个方法:•__get__(self, instance
- 关于CIFAR10数据集的使用主要解决了如何把数据集与transforms结合在一起的问题。CIFAR10的官方解释torchvision.
- 本文实例为大家分享了python实现多张图片拼接成大图的具体代码,供大家参考,具体内容如下上次爬取了马蜂窝的游记图片,并解决了PIL模块的导
- 获取输入的五个点画五边形def pentagonUpdate(): p = {} win = GraphWin(&q
- 环境:ubuntu 16.04 python3.5 pycharm包 : wave pyaudio sys上代码:AudioPlayer.p
- 问题今天用nohup后台执行python程序,并将标准输出和错误输出重定向到一个log文件,但发现log文件隔好久才会更新,很煎熬。。。然而
- 1、查询语句的执行顺序select[distinct] from join(如left 
- 2个简单的代码,帮你实现word的导出和word的读取功能一:导出word,word中的内容为代码:from docx import Doc
- 加上这句代码:print torch.cuda.is_available()判断完毕!说说在pytorch中如何查看gpu信息吧~为什么将数