python 基础之浅拷贝与深拷贝
浅拷贝与深拷贝
1.普通赋值
例1:
a = 15
b = a
a = 16
print(b)
#例2:
lst1 = [1,2,3]
lst2 = lst1
lst1.append(4)
print(lst2)
#这个情况是lst1和lst2地址相同,元素相同
2.浅拷贝
#只拷贝以及所有元素
#例:
#法一:直接.copy()拷贝
lst1 = [1,2,3]
#lst2 = lst1
lst2 = lst1.copy()
print(lst2)
lst1.append(4)
print(lst2)
print(lst1)
#法二:使用模块进行浅拷贝
import copy
#copy 模块下面有一个同名的copy方法
lst1 = [1,2,3]
lst2 = copy.copy(lst1)
lst1.append(5)
print(lst2)
3.深拷贝
将所有级别的元素统统独立拷贝一份
"每一级的所有元素统统拷贝一份,不沿用以前的数据"
#import引入copy复制模块 deepcopy深拷贝 copy浅拷贝
import copy #copy deepcopy()
lstvar = [1,2,3,[4,5,6]]
lstvar2 = copy.deepcopy(lstvar)
lstvar[-1].append(7)
print(lstvar2)
print(lstvar)
dictvar = {'a':[1,2],"b":{"c":123,"d":[7,8,9]}}
dict2 = copy.deepcopy(dictvar)
dictvar["b"]["d"].extend("ab")
print(dict2)
lstvar = [1,2,3,[4,5]]
lst2 = copy.copy(lstvar)
print(lst2)
lstvar.append(66)
print(lst2)
#在浅拷贝中把字符串这样列表的当着一级容器数据
lstvar = [1,2,3,"45"]
lstvar2 = copy.copy(lstvar)
# lstvar[-1] = 1234 #
# print(lstvar)
# print(lstvar2)
#赋值与浅拷贝与深拷贝内存关系
浅拷贝只有一级数据时独立的,二级的数据时相同的地址的