Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python深度复制和浅复制并传递引用_Python_Linux_Reference_Deep Copy_Shallow Copy - Fatal编程技术网

python深度复制和浅复制并传递引用

python深度复制和浅复制并传递引用,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

关于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.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]}