前言
今天,就是说小歇一把,有学校的作业等着我 不过,货还是有的,昨天发了个比较水的集合,因为确实让这个深浅拷贝绕来绕去的,有点麻木,昨天也就没时间来得及分享。“大绕”不说,还有个“小绕”在纠缠着我。其实写博客本来就是记录记录自己每天的学习状态,今天既然没内容,还是偷懒了,希望明天自己别混,共勉! 那就先分享一下这个“小绕”
小数据池及代码块
小数据池
代码块
接下来就是重头戏
深浅拷贝
赋值:值相同,id相同
-
lst = [1, 2, [3, 4]]
lst1 = lst
print(lst)
print(lst1)
lst[-1].append(8)
print(lst1)
print(lst)
print(id(lst))
print(id(lst1))
浅拷贝
-
情况一:浅拷贝的时候,只会开辟一个新的容器,其他元素使用的都是源列表中的元素,id也相同
-
lst = [1, 2, [3, 4]]
lst1 = lst.copy()
print(lst1)
print(lst)
print(id(lst))
print(id(lst1))
print(id(lst[0]))
print(id(lst1[0]))
-
-
情况二:浅拷贝的时候只拷贝第一层元素 ? 浅拷贝在替换第一层元素(不可变/可变数据类型)时,拷贝出来的新列表不进行改变 ? 浅拷贝在修改第一层元素中的元素时,拷贝出来的新列表进行改变
-
lst = [1, 2, [3, 4]]
lst1 = lst.copy()
lst[-1].append(0)
print(lst)
print(lst1)
lst1[0] = 11
print(lst)
print(lst1)
lst = {1: [2, 3, [4, 5]]}
lst1 = lst.copy()
lst["1"] = 0
lst["1"][0] = 0
-
深拷贝
开辟一个容器空间,不可变数据类型— 空间公用 可变数据类型— 自己开辟空间(空间里的值是不可变的数据进行共用,可变的数据类型再次开辟空间)
import copy
lst1 = copy.deepcopy(lst)
-
-
lst = [1, 2, 3, [5, 6, 7, [8, 9]]]
import copy
lst1 = copy.deepcopy(lst)
print(id(lst[-1][-1]))
print(id(lst1[-1][-1]))
|