Python的赋值、浅拷贝和深拷贝

示例代码:

# This Python file uses the following encoding: utf-8
"""
直接赋值:其实就是对象的引用(别名)。
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
"""
import copy
a = [1, 2, 3, 4, ['a', 'b']]  # 原始对象

b = a  # 赋值引用,a 和 b 都指向同一个对象。【要改变都改变】
c = copy.copy(a)  # 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。【子对象改变就都改变】
d = copy.deepcopy(a)  # 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。【两者没任何关系】

a.append(5)  # 修改对象a
a[4].append('c')  # 修改对象a中的['a', 'b']数组对象

print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)

输出结果:

a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5] # 输出数组a
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5] # 因为b与a指向同一对象,b的值就是a的值
c =  [1, 2, 3, 4, ['a', 'b', 'c']] # c为a的浅拷贝,a中的子对象修改了,所以c的子对象也修改了,其他无改变
d =  [1, 2, 3, 4, ['a', 'b']] # d与a没关系,a改变d也不会改变

 

上一篇:并发设计模式


下一篇:drawio(类似于visio的画图软件)