python - 为什么 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
解决方案
在此示例中,我将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]))
输出显示所有不同的数字。
推荐阅读
- laravel-8 - 检索 id 并选中相关框
- azure - Azure AD 身份验证错误:IDX10214:观众验证失败
- python - 如何在 Oracle SQL 或 Python 中逐步取平均值
- javascript - Django:如何在不更改 url 的情况下单击按钮打开一个小窗口
- json - Xcode compactMap返回可解码的空数组
- scikit-learn - x数据缩放下的KernelRidge参数
- javascript - 悬停效果的图像不会保持可见
- list - 循环宏:如何同时将局部变量收集到多个列表中?
- html - 使用 ul 的 Z-index 和 displax flex
- python - 未打开项目的 Revit Python Shell