首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的复合对象

Python中的复合对象
EN

Stack Overflow用户
提问于 2022-07-12 20:38:38
回答 1查看 199关注 0票数 0

我在Python中读到了关于浅拷贝和深拷贝的文章,其中我在文档中遇到了以下句子:

浅层复制和深度复制之间的区别仅适用于复合对象(包含其他对象的对象,如列表或类实例)。

我不知道什么是复合对象,什么不是复合对象。基于上述定义(包含其他对象的对象),每个容器都是一个复合对象,因为容器中的每个元素都是对象(因为在Python中,所有元素都是对象,甚至是整数号),容器本身也是一个对象,因此每个容器(至少有一个元素)都是一个复合对象。

如果我们同意我所说的,那么引文中关于浅拷贝和深拷贝的第一部分--“浅拷贝和深拷贝之间的区别仅与复合对象有关”--就会有问题,因为如果我们知道浅层复制和深拷贝之间的区别只适用于复合对象,那么对于一个整数列表的浅拷贝就不应该工作了:

代码语言:javascript
运行
复制
pp = [1,2,3,4]
qq= copy.copy(pp)

pp[0] = 99

print(pp)
>> [99,2,3,4]

print(qq)
>> [1,2,3,4]

有人能澄清复合对象的含义吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-12 20:52:40

那句话用词很差。他们的意思是

浅层复制和深度复制之间的区别仅适用于复合对象(包含其他对象的对象,如列表或类实例),其中任何元素(在任何嵌套深度)都是可变的。

在浅拷贝和深拷贝中,顶层对象都会被复制.但是,当您进行深度复制时,所有可变元素也都会被复制,其中包含的可变元素也是递归的。

同时,复制包含嵌套可变对象的不可变复合对象(例如元组)。

代码语言:javascript
运行
复制
x = ([1, 2], [3, 4])
y = copy.copy(x)
z = copy.deepcopy(x)
id(x[0]) == id(y[0]) # True
id(x[0]) == id(z[0]) # False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72958108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档