Python字典中的浅拷贝

2024-09-28 01:32:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面一段Python代码,我试图在dictionary中实现浅层复制操作:

d = {'name':'Subhayan','age':32,'friends':['papa','mama']}
new_d = d.copy()
new_d['friends'] = []

print (d)
print (new_d)

现在根据我的理解,如果有一个嵌套的数据结构,比如列表,在我的情况下,浅拷贝将无法工作。新字典的变化也会影响到新字典。在

有人能告诉我我的理解是否正确吗?在

运行这个脚本后,我得到的答案是不同的。在

^{pr2}$

很显然,这是在做深度复制。在

我哪里出错了?在


Tags: 代码name数据结构列表newagedictionary字典
3条回答

如果您希望在更改新字典时更改字典中的对象,则根本不应使用copy或{}

只需将新的“d”分配给d:

d = {'name':'Subhayan','age':32,'friends':['papa','mama']}
new_d = d
new_d['friends'] = []

assert d['friends'] == []

https://docs.python.org/2/library/copy.html: 浅拷贝构造一个新的复合对象,然后(尽可能地)在其中插入对原始对象的引用。在

  • 新的复合对象是新的
  • 原版中发现的物品是“妈妈”和“爸爸”
  • 所以提到的是“妈妈”和“爸爸”

您没有更改被引用对象的内容,而是更改了对象(列表)本身。在

编写的代码不会遇到别名问题。但是,如果修改列表中的某个值,该更改将出现在两个字典中。在

d = {'name':'Subhayan','age':32,'friends':['papa','mama']}
new_d = d.copy()
new_d['friends'][0] = 'new value'

print (d)
print (new_d)

# returns:
{'age': 32, 'name': 'Subhayan', 'friends': ['new value', 'mama']}
{'age': 32, 'name': 'Subhayan', 'friends': ['new value', 'mama']}

相关问题 更多 >

    热门问题