Python的深浅拷贝
Python的深浅拷贝
深浅拷贝
1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容
1 list1 = ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] 2 list2 = list1 3 print("list1的内容为:",list1,"list1的内存地址为:",id(list1)) 4 list2的内容为: ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] list1的内存地址为: 2006224427976 5 print("list2的内容为:",list2,"list1的内存地址为:",id(list2)) 6 list2的内容为: ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] lis2的内存地址为: 2006224427976
所以lst1的内存指向和lst2是⼀样的list1改变了list2也发生了改变
1 list1 = ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] 2 list2 = list1 3 list1.append("我是YJ呀") #在list1中最后追加内容 4 print("list1",list1) 5 list1 ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19'], '我是YJ呀'] 6 print("list2",list2) 7 list2 ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19'], '我是YJ呀']
2. 浅拷贝,只拷贝第一层内容 [:] copy()
1 list1 = ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] 2 list2 = list1[:] #利用切片拷贝,索引从头到尾不填代表全部,浅拷贝 3 list3 = list1.copy() #利用copy函数拷贝,浅拷贝 4 print('list1的内容为:',list1,'list1的内存地址为:',id(list1)) 5 list1的内容为: ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] list1的内存地址为: 2201519417800 6 print('list2的内容为:',list2,'list2的内存地址为:',id(list2)) 7 list2的内容为: ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] list2的内存地址为: 2201519417672 8 print('list3的内容为:',list3,'list3的内存地址为:',id(list3)) 9 list3的内容为: ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']] list3的内存地址为: 2201519417928
3. 深拷贝,把这个对象内部的内容全部拷贝一份,引入copy模块,deepcopy()
1 import copy #导入copy模块 2 list1 = ['python','PHP','java','C',['name','YJ','age','19']] #定义一个列表 3 list2 = copy.deepcopy(lst1) #把list1深拷贝一份赋值给list2 4 print(list2) #输出 5 ['python', 'PHP', 'java', 'C', ['name', 'YJ', 'age', '19']]
2019年11月5日