Python之浅拷贝和深拷贝

Posted MrDoghead

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之浅拷贝和深拷贝相关的知识,希望对你有一定的参考价值。

介绍

如果你学习过别的编程语言,比如java,那么应该知道shallowcopy和deep copy。在Python中,copy也有深浅之分,而且与直接复制各不相同。

用法

1. 浅拷贝

a = {'n':[1,2,3]} 
b = a.copy() 
a, b
# ({'n': [1, 2, 3]}, {'n': [1, 2, 3]})

a['n'].append(4)
a, b
# ({'n': [1, 2, 3, 4]}, {'n': [1, 2, 3, 4]})

2. 深拷贝

import copy

a = {'n':[1,2,3]} 
b = copy.deeepcopy(a)
a, b
# ({'n': [1, 2, 3]}, {'n': [1, 2, 3]})

a['n'].append(4)
a, b
# ({'n': [1, 2, 3, 4]}, {'n': [1, 2, 3]})

3. 区别

从上面两个例子我们可以看到,使用浅拷贝b会随a的变化而变化,因为他们share的是同一个list地址,而深拷贝中,b和a有独立的list地址互不影响。
而且拷贝与赋值不同,如果是赋值操作,a和b会share同一个字典对象,而拷贝时a和b有各自的字典对象,只不过字典内的list不同而已。
注意,使用深拷贝要import模块copy!

以上是关于Python之浅拷贝和深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

python之浅拷贝和深拷贝

python之浅拷贝深拷贝

pyhton之浅拷贝(copy)和深拷贝(deepcopy)详解,举例说明

java克隆之浅拷贝和深拷贝

lua踩坑之浅拷贝与深拷贝

lua踩坑系列之浅拷贝与深拷贝