“Python永远不会隐式复制对象”这是真的吗?

时间:2018-05-04 04:38:08

标签: python object dictionary

我在this question的一个答案中找到了这个陈述。

这是什么意思?如果声明是“Python永远不会隐式复制字典对象”,我就没问题了。我相信元组,列表,集合等在python中被认为是“对象”,但问题中描述的字典问题不会出现在它们中。

2 个答案:

答案 0 :(得分:4)

链接答案中的陈述比应有的更广泛。隐式副本在Python中很少见,并且在它们发生的情况下, Python 是否正在执行隐式副本是有争议的,但是它们会发生。

绝对正确的是,名称分配的默认规则不涉及副本。默认情况下,

a = b

不会将分配的对象复制到a。此默认值可以由自定义本地命名空间对象覆盖,这可能在使用exec或使用__prepare__方法的元类时发生,但这样做非常罕见。

对于隐式副本确实发生的情况,首先想到的是multiprocessing标准库模块在整个地方执行隐式副本,这是multiprocessing导致的原因之一很多困惑。名称分配以外的作业也可能涉及副本; a.b = ca[b] = ca[b:c] = d可能都涉及副本,具体取决于aa[b:c] = d特别可能涉及复制d的数据,但通常不会涉及生成d副本的对象。

答案 1 :(得分:-1)

python有很多困难的类型。它们分为两组:
1)不改变 - 整数,字符串,元组
2)更改 - 列表,字典
例如:
- 不要改变

x += 1 # x = x + 1

对于这个' x' python创建新对象,如' Int'链接在内存0x0001f0a

x = [1, 2, 'spam']

python在内存中创建新链接,如0x1003c00 - 改变

y = x

对于这个' x' python创建新对象,如' Int'链接在内存0x0001f0a

docker run yada yada -p x.x.x.x:80:80 -p y.y.y.y:1024:1024
来自' x'的python复制链接到了'