python学习之深浅拷贝

深浅拷贝

浅拷贝:

1、针对的是可变数据类型:list、dict、set  ,不可变数据类型int、str、tuple、bool 是没有拷贝一说的,他们都没copy() 方法

2、浅拷贝后是在内存地址中分配了一份新的地址,且浅拷贝只拷贝了第一层,第二层不会拷贝,故第二层如果改变,原数据及浅拷贝后的数据也将改变

3、= 赋值不是浅拷贝,[:] 切片是浅拷贝

a = [11,22,[11,22]]

b = a  

注:以上称为赋值,只是将a,b都指向了同一个内存地址

a.append(33)

print(b)

>>> [11,22,[11,22],33]   还是一起改变,b和a都是列表的内存地址的两个别名

c = a.copy()   用方法copy是浅拷贝,id(a)  与 id(c)  的内存地址是不同的

3、切片是浅拷贝

1 lis = [11,22,[11,22]]
2 qie = lis[:]
3 lis[2].append(33)
4 print(lis,qie) # [11, 22, [11, 22, 33]] [11, 22, [11, 22, 33]]
5 print(id(lis),id(qie))   # 1482689615624 1482689615752

深拷贝:

就是将原文件内部元素完全拷贝,不会将因为第二层元素改变,另一个也会改变

深拷贝方法:

import  copy

list_new = copy.deepcopy()

posted @ 2018-06-19 13:11  Alive_2020  阅读(123)  评论(0编辑  收藏  举报