我在this question的一个答案中找到了这个陈述。
这是什么意思?如果声明是“Python永远不会隐式复制字典对象”,我就没问题了。我相信元组,列表,集合等在python中被认为是“对象”,但问题中描述的字典问题不会出现在它们中。
答案 0 :(得分:4)
链接答案中的陈述比应有的更广泛。隐式副本在Python中很少见,并且在它们发生的情况下, Python 是否正在执行隐式副本是有争议的,但是它们会发生。
绝对正确的是,名称分配的默认规则不涉及副本。默认情况下,
a = b
不会将分配的对象复制到a
。此默认值可以由自定义本地命名空间对象覆盖,这可能在使用exec
或使用__prepare__
方法的元类时发生,但这样做非常罕见。
对于隐式副本确实发生的情况,首先想到的是multiprocessing
标准库模块在整个地方执行隐式副本,这是multiprocessing
导致的原因之一很多困惑。名称分配以外的作业也可能涉及副本; a.b = c
,a[b] = c
和a[b:c] = d
可能都涉及副本,具体取决于a
。 a[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复制链接到了'