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日

posted @ 2019-11-05 21:14  YJ-TX  阅读(148)  评论(0编辑  收藏  举报