这篇文章主要介绍了关于浅谈python中字典append 到list 后值的改变,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
看一个例子
d={'test':1}d_test=dd_test['test']=2print d
登录后复制
如果你在命令行实践的话,会发现你改动的是d_test ,但是d 也跟着改变了。
通常这和我们期待的不一样。
立即学习“Python免费学习笔记(深入)”;
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']=2b['w'].append(123)print aprint b
登录后复制
这个时候发现a中’q’的值不会变化但是其列表中的值还是发生了改变
因为copy是浅层次copy
但是这里有个track
a={'q':1,'w':[]}b=a.copy()b['q']=2b['w']=[123]print aprint b
登录后复制
直接赋值的话,则不会改变a中的结构(多半是append这个方法的关系)
深层次的copy
import copya={'q':1,'w':[]}b=copy.deepcopy(a)
登录后复制
相关推荐:
Python 创建空的list,以及append用法讲解
以上就是浅谈python中字典append 到list 后值的改变的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2262727.html