其实在面试中会经常被问到Python中深拷贝和浅拷贝的知识,这里进行下总结,以便以后复习
在python中的深拷贝和浅拷贝和java里面的概念是一样的,所谓的浅拷贝就是拷贝第一层中的引用,所谓的深拷贝就是逐层进行拷贝(对对象的资源进行拷贝)。
首先谈谈可变对象和不可变对象:
1.可变对象
在python中,list,set,dict 等类型的数据都是可变对象,相对于不可变对象而言,可变对象的数据可以被修改。
l = [1, 2, 3]
l[0] = 10
# 列表是一个可变对象,可以修改列表中的元素值
2.不可变对象
在 Python 中,int, str, tuple 等类型的数据都是不可变对象,不可变对象的特性是数字不可被修改。
1 = 2
# 1 和 2都是不可变对象,1 不可能被 2 所代替
浅拷贝
1.不可变对象的拷贝:不开辟新空间,相当于赋值操作
2.可变对象的拷贝:元素是可变对象,并且被修改,那么拷贝的对象也会发生变化
浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素。
深拷贝
深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。
总结:
不可变对象在赋值时会开辟新空间。
可变对象在赋值时,修改一个的值,另一个也会发生改变。
深浅拷贝对不可变对象拷贝时,不开辟新空间,相当于赋值操作。
浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化。
深拷贝在拷贝时,会逐层进行拷贝,直到所有的引用都是不可变对象为止。
网友评论