python中字典的copy方法

2013-03-31 16:56:59 +08:00
 SolrJ
>>> x = {'username': 'admin', 'passwd': '000000', 'info': ['male', '10', 'more']
}
>>> y = x.copy()
>>> y['username'] = 'administrator'
>>> y['info'].remove('more')
>>> y
{'username': 'administrator', 'passwd': '000000', 'info': ['male', '10']}
>>> x
{'username': 'admin', 'passwd': '000000', 'info': ['male', '10']}
使用copy方法复制了一个字典y。通过字典赋值,可以修改username的值,在y字典里可以看到修改,但是在x字典看不到。但是我删掉了info的一个值,在两个字典里都有体现。是不是复制字典y后,info的指向是原字典的list,但是username的指向在两个字典(x,y)里为什么不一样呢?
3070 次点击
所在节点    Python
7 条回复
lookhi
2013-03-31 17:00:35 +08:00
info -> 是List

8.17. copy — Shallow and deep copy operations
KotiyaSanae
2013-03-31 17:10:23 +08:00
深复制和浅复制的问题,copy是浅复制。具体的忘了,大致就是,浅复制的对象只是深复制对象的一个引用。看看官方的说法吧
KotiyaSanae
2013-03-31 17:10:48 +08:00
打错了,浅复制是对象的引用
SolrJ
2013-03-31 17:13:57 +08:00
@lookhi 也就是说对于复杂的对象,是通过一个指向原始字典的reference来操作的(对象中又包括对象),对于简单的,是通过复制的方式?
SolrJ
2013-03-31 17:20:25 +08:00
@KotiyaSanae 我认为username的字段在x和y里面都有一个,而y里面的info字段是指向x里的list的。这样理解是否可以?
KotiyaSanae
2013-03-31 17:24:03 +08:00
@SolrJ 好像就只这样,看看这篇文章吧 http://blog.csdn.net/vicken520/article/details/8227524
zhy0216
2013-03-31 17:24:59 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/64564

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX