我突然有点困惑,我现在可能很累,所以这可能是原因。
无论如何,请使用解释器考虑以下内容:
> 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)
答案 0 :(得分:1)
在这种情况下,在内存中创建了字典对象{'hello': 'world'}
,然后分配了x
作为对其的引用。分配y=x
会为字典对象分配 second 引用,这次是y
。
但是,y
不是指向x
的指针的指针。重新分配x
不会更改所引用的y
。
对于第二个问题,在这种情况下,没有区别。
使用:
x = {'test':1}
y = dict(x)
创建字典的新副本,并将其分配给y
。
使用:
y = copy.deepcopy(x)
创建相同的副本。您会看到的区别是字典的值是一个可变对象,如列表。
在这里,y
是x
的浅表副本:
x = {'test': [1,2,3]}
y = dict(x)
因此,更改x
引用的字典对象内部的列表也将出现在y
中。
x['test'][1] = 0
y
# returns:
{'test': [1, 0, 2]}
但是,使用:
x = {'test': [1,2,3]}
y = copy.deepcopy(x)
将创建主要对象及其包含的所有对象的副本。因此,现在修改x
中的列表将不会更改y
的值。
x['test'][1] = 0
y
# returns
{'test': [1,2,3]}