首页 > 解决方案 > 为什么 Python 中的 Deepcopy 不为单个 int 值创建新对象?

问题描述

我需要在这里对这个概念进行一些澄清,我正在.deepcopy()python 中尝试,我已经读过:

深拷贝构造一个新的复合对象,然后递归地将在原始对象中找到的对象的副本插入其中。

但是,在下面的代码中,我可以看到 和 的 ID x[0] = y[0]x[1] = y[1]但 ID 是x[2] != y[2],这是有道理的,因为它插入了对象的副本。但是为什么 ID 是x[0]equalsy[0]x[1]equalsy[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

标签: pythonlistcopynested-listsdeep-copy

解决方案


在此示例中,我将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]))

输出显示所有不同的数字。


推荐阅读