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