python对象引用和深度复制

2024-04-19 12:05:42 发布

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

我突然有点困惑,我现在可能累了,所以这可能是原因。你知道吗

无论如何,请考虑使用解释器执行以下操作:

> x = {'hello':'world'}
> y=x

> x= None

>y
y={'hello':'world'}

为什么y = None在更改后y不是引用了与x相同的值?你知道吗

第二个问题:
两者之间的区别是什么:

x= {'test':1}
y = dict(x)
VS  
y = copy.deepcopy(x)

Tags: testnonehelloworld原因解释器dictvs
1条回答
网友
1楼 · 发布于 2024-04-19 12:05:42

在这种情况下,dictionary对象{'hello': 'world'}在内存中创建,然后x被指定为对它的引用。赋值y=x第二个引用赋值给dictionary对象,这次赋值给y。你知道吗

但是,y不是指向x的指针。重新分配x不会改变y所引用的内容。你知道吗


对于你的第二个问题,在这个具体的例子中,没有区别。你知道吗

使用:

x = {'test':1}
y = dict(x)

创建字典的新副本并将其分配给y。你知道吗

使用:

y = copy.deepcopy(x)

创建相同的副本。当dictionary的值是一个可变对象(如列表)时,您将看到不同之处。你知道吗

这里,yx的浅拷贝:

x = {'test': [1,2,3]}
y = dict(x)

因此,更改x引用的dictionary对象内部的列表也将出现在y中。你知道吗

x['test'][1] = 0
y
# returns:
{'test': [1, 0, 3]}

但是,使用:

x = {'test': [1,2,3]}
y = copy.deepcopy(x)

将创建主对象及其包含的所有对象的副本。所以现在修改x中的列表不会更改y的值。你知道吗

x['test'][1] = 0
y
# returns
{'test': [1,2,3]}

相关问题 更多 >