python浅拷贝、深拷贝和赋值“=”

61 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

a = {1:[1,2,3]}



① 赋值"="操作

b = a: 赋值引用,a 和 b 都指向同一个对象。
在这里插入图片描述

注意:在使用赋值“=”的时候,不可对原变量进行重新的赋值操作,否则原变量会指向一个新的内存地址。例如:

例1:

# 用"="进行赋值操作
a = [1,2,3]
b = a
a = [2,3,4]
print(a)
print(b)
"""
结果:
[2, 3, 4]
[1, 2, 3]
"""

例2:

# 对变量a本身进行修改
a = [1,2,3]
b = a
a.append(99)
print(a)
print(b)
""""
结果:
[1, 2, 3, 99]
[1, 2, 3, 99]
"""

浅拷贝

b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
在这里插入图片描述

copy对于一个复杂对象的子对象并不会完全复制,比如序列里的嵌套序列,字典里的嵌套序列等都是复杂对象的子对象。对于子对象,python会把它当作一个公共镜像存储起来,所有对他的复制都被当成一个引用。

深拷贝

b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
在这里插入图片描述