美文网首页
python提高:关于深拷贝(deep copy)和浅拷贝(sh

python提高:关于深拷贝(deep copy)和浅拷贝(sh

作者: JIAKELEI | 来源:发表于2018-09-17 17:23 被阅读0次

其实在面试中会经常被问到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.可变对象的拷贝:元素是可变对象,并且被修改,那么拷贝的对象也会发生变化

浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的地址的拷贝。也就是说新的容器中指向了旧的元素。

深拷贝


深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅是值相同而已,是完全的副本。

总结:

不可变对象在赋值时会开辟新空间。

可变对象在赋值时,修改一个的值,另一个也会发生改变。

深浅拷贝对不可变对象拷贝时,不开辟新空间,相当于赋值操作。

浅拷贝在拷贝时,只拷贝第一层中的引用,如果元素是可变对象,并且被修改,那么拷贝的对象也会发生变化。

深拷贝在拷贝时,会逐层进行拷贝,直到所有的引用都是不可变对象为止。

相关文章

网友评论

      本文标题:python提高:关于深拷贝(deep copy)和浅拷贝(sh

      本文链接:https://www.haomeiwen.com/subject/odlrnftx.html