
浅拷贝只会对可变数据类型的第一层数据进行拷贝,而不会对内部的元素进行拷贝,拷贝成功后会开辟一个新的内存地址。对不可变数据类型进行拷贝时,实际上是对引用的一个拷贝,两个变量指向同一个内存地址。
在python中,使用浅拷贝是使用内置模块copy中的copy方法表示浅拷贝
import copy
# 不可变数据类型
num1 = 1
num2 = copy.copy(num1)
print(id(num1), id(num2))
# 1564069134576 1564069134576
# 可变数据类型
list1 = [1,2]
list2 = copy.copy(list1)
print(id(list1), id(list2))
# 1940269990784 1940269955456
# 可变数据类型内部的元素
print(id(list1[1]), id(list2[1]))
# 2465533853968 2465533853968
上面例子中只举了部分数据类型。
深拷贝深拷贝也只会对可变数据类型进行拷贝,但是与浅拷贝不同的是,深拷贝对可变数据类型拷贝时,还会对内部的元素进行检查,如果内部的元素也是可变数据类型,则也会进行拷贝,而浅拷贝只对对第一层数据进行拷贝,不会对内部元素进行拷贝。拷贝成功后则会开辟新的内存空间存放拷贝后的数据。
在python中,深拷贝是使用内置模块copy中的deepcopy命令表示
# 不可变数据类型
num1 = 1
num2 = copy.deepcopy(num1)
print(id(num1), id(num2))
# 1533418143984 1533418143984
# 可变数据类型
list1 = [1,2,(1,2),[1,2]]
list2 = copy.deepcopy(list1)
print(id(list1), id(list2))
# 2342170559360 2342170524032
# 可变数据类型内部的元素
print(id(list1[2]), id(list2[2]))
# 2342167324736 2342167324736
print(id(list1[3]),id(list2[3]))
# 3058500666240 3058500631616
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)