为什么 Python 中的 Deepcopy 不为单个 int 值创建新对象?
Why Deepcopy in Python not creating new objects for single int values?
我需要对这个概念做一些澄清,我正在 python 中尝试 .deepcopy()
并且我已经阅读了:
A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.
但是,在我下面的代码中,我可以看到 x[0] = y[0]
和 x[1] = y[1]
的 ID,但 x[2] != y[2]
的 ID,这是有道理的,因为它插入了对象的副本。但是为什么x[0]
的ID等于y[0]
而x[1]
等于y[1]
?
这是我试过的代码:
x=[1,2,[3,4]]
y=cp.deepcopy(x)
print(id(x),id(y))
for i in range(len(x)):
print(id(x[i]),id(y[i]))
输出:
923236765248 923256513088
140729072564000 140729072564000
140729072564032 140729072564032
923256458496 923256516928
在这个例子中,我使用 obj
作为另一个值的包装器:
import copy as cp
class obj:
def __init__(self, i):
self.i = i
def __repr__(self):
return f'obj({self.i})'
x=[obj(1),obj(2),[obj(3),obj(4)]]
y=cp.deepcopy(x)
print(id(x),id(y))
for i in range(len(x)):
print(id(x[i]),id(y[i]))
输出显示所有不同的数字。
我需要对这个概念做一些澄清,我正在 python 中尝试 .deepcopy()
并且我已经阅读了:
A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.
但是,在我下面的代码中,我可以看到 x[0] = y[0]
和 x[1] = y[1]
的 ID,但 x[2] != y[2]
的 ID,这是有道理的,因为它插入了对象的副本。但是为什么x[0]
的ID等于y[0]
而x[1]
等于y[1]
?
这是我试过的代码:
x=[1,2,[3,4]]
y=cp.deepcopy(x)
print(id(x),id(y))
for i in range(len(x)):
print(id(x[i]),id(y[i]))
输出:
923236765248 923256513088
140729072564000 140729072564000
140729072564032 140729072564032
923256458496 923256516928
在这个例子中,我使用 obj
作为另一个值的包装器:
import copy as cp
class obj:
def __init__(self, i):
self.i = i
def __repr__(self):
return f'obj({self.i})'
x=[obj(1),obj(2),[obj(3),obj(4)]]
y=cp.deepcopy(x)
print(id(x),id(y))
for i in range(len(x)):
print(id(x[i]),id(y[i]))
输出显示所有不同的数字。