python深度复制和浅复制并传递引用
关于python深度复制和浅层复制的问题 邮局在 帮不了我 为什么1的总和是6而不是10 e、 g.1: 输出和为6 e、 g.2: 输出和为10 e、 g.3: 输出和为6 此外,例如4python深度复制和浅复制并传递引用,python,linux,reference,deep-copy,shallow-copy,Python,Linux,Reference,Deep Copy,Shallow Copy,关于python深度复制和浅层复制的问题 邮局在 帮不了我 为什么1的总和是6而不是10 e、 g.1: 输出和为6 e、 g.2: 输出和为10 e、 g.3: 输出和为6 此外,例如4 其总和为6,如果副本是对kvps的引用,则应为10 浅复制在顶级容器中复制可变对象。深度副本生成数据结构中所有可变容器的新实例 “例如2”的结果是10,因为你在外部复制了dict,但内部的两个列表仍然是旧列表,并且列表可以在适当的位置更改(它们是可变的) 深度复制运行aList.copy()、bList.c
其总和为6,如果副本是对kvps的引用,则应为10 浅复制在顶级容器中复制可变对象。深度副本生成数据结构中所有可变容器的新实例 “例如2”的结果是10,因为你在外部复制了dict,但内部的两个列表仍然是旧列表,并且列表可以在适当的位置更改(它们是可变的) 深度复制运行aList.copy()、bList.copy(),并用副本替换dict中的值
e、 g.1说明:
kvps = {'1': 1, '2': 2}
theCopy = kvps.copy()
# the above is equivalent to:
kvps = {'1': 1, '2': 2}
theCopy = {'1': 1, '2': 2}
当您将此应用于例如2时:
kvps = {'1': aList, '2': bList}
theCopy = {'1': aList, '2': bList}
两个DICT中的列表对象是相同的对象,因此修改其中一个列表将反映在两个DICT中
进行深度复制(例如3)会导致:
kvps = {'1': aList, '2': bList}
theCopy = {'1': [1, 2], '2': [3, 4]}
这意味着两个dict有完全不同的内容,修改一个不会修改另一个
e、 g.4 via
dict()
相当于浅拷贝。e.g.1在本例中,将复制关键点,但不复制它们指向的对象。更改一个关键点指向的内容不会更改该关键点的副本。这是因为密钥的副本存在于内存中的不同位置,并且在重新分配之前只会指向同一对象。其中一个副本的重新分配不会改变另一个副本,这就是为什么会得到6 e、 g.2
钥匙被复制了。两个关键点指向相同的对象。赋值修改了两个键所指向的对象(尽管两个键在内存中的位置不同),这就是为什么在总和中两个键都出现了变化 e、 g.3
一切都是复制的。每个关键点都指向其自己的对象副本。现在记忆中有两个“主义者”。KVPS指向的列表已更改,而COPY指向的“列表”未更改
尝试使用括号
{}
按钮使您的代码格式正确。例如,1如果同一个键的两个副本指向相同的值,为什么同一个键的另一个副本看不到对一个键副本的重新分配?想象这些键像路标一样,符号A表示芝加哥。你复制了一份a号符号,称之为B号符号。B号符号上也写着芝加哥。但我可以在不改变标志B的情况下改变标志A。在例2中,你做了两个标志牌,然后去芝加哥拆除城市,并将底特律置于其位置。
kvps = { '1' : 1, '2' : 2 }
theCopy = dict(kvps) # theCopy hold a reference to kvps ?
kvps['1'] = 5 # should also change theCopy , right ?
sum = kvps['1'] + theCopy['1']
print kvps
print theCopy
print sum
kvps = {'1': 1, '2': 2}
theCopy = kvps.copy()
# the above is equivalent to:
kvps = {'1': 1, '2': 2}
theCopy = {'1': 1, '2': 2}
kvps = {'1': aList, '2': bList}
theCopy = {'1': aList, '2': bList}
kvps = {'1': aList, '2': bList}
theCopy = {'1': [1, 2], '2': [3, 4]}