深拷贝和浅拷贝

深拷贝和浅拷贝,第1张

浅拷贝

浅拷贝只会对可变数据类型的第一层数据进行拷贝,而不会对内部的元素进行拷贝,拷贝成功后会开辟一个新的内存地址。对不可变数据类型进行拷贝时,实际上是对引用的一个拷贝,两个变量指向同一个内存地址。

在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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/732355.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-27
下一篇2022-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存