美文网首页
python深浅拷贝

python深浅拷贝

作者: 霡霂976447044 | 来源:发表于2019-02-16 16:58 被阅读4次

浅拷贝

浅拷贝copy.copy是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝里面的内容。

copy.copy和=号赋值不一样,=赋值id相同,copy赋值id不同。

复制对象最外层的内存。

浅拷贝对嵌套列表只拷贝引用。

切片操作是浅拷贝,id不同。

=号操作是赋值操作,创建一个新的名字指向一个内存,id相同。

对于不可变对象无法浅拷贝,不管是否不可变对象里面是否有可变引用还是不可边引用都不能拷贝, 会出来相同的id。

深拷贝

用copy.deepcopy复制一块内存。

深拷贝是两块不同的内存。互不影响。

对于不可变对象(元组)有指向可变对象则课业深拷贝才可以深拷贝,否则不可以可以会出来相同的id。

代码理解

ipython3>>

a = [11, 22]
b = [33, 44]
c = [a, b]
d = copy.copy(c)
e = copy.deepcopy(c)
id(c)
id(d)
id(e)
c.append([55, 66])
c
d
e

copy.copy(c) 只是单拷贝了外层的a和b的引用,
三个id都是不同的,c改变了但是d,e没有改变,
理解下面的代码结果会怎样。

def foo(numlist):
    numlist.append(23)
l = [1, 2]
foo(l)
l = [1, 2]
foo(l[:])
foo(copy.copy(l))
foo(copy.deepcopy(l))

答案是,只有foo(l)能够修改l。可变对象来说才能改变。

切片

a = [1, 2]
b = a[::]
c = a

id(a)和id(b)不一样,id(a)和id(c)一样。切片操作是浅拷贝。
PS:对于dict,其value是引用,浅拷贝(dict.copy)的话,id不同,但是修改value会对其它对象产生影响。

相关文章

  • Python深浅拷贝

    深浅拷贝 首先来个准备知识: list1 = ['我爱你','中国','亲爱的母亲'] list2 = list1...

  • python 深浅拷贝

  • Python深浅拷贝

    在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝...

  • Python深浅拷贝

    预备知识一——python的变量及其存储 在详细的了解python中赋值、copy和deepcopy之前,我们还是...

  • Python深浅拷贝

    导入模块import copy names = ['lilei','hanmei',['lll','rrrr']]...

  • python深浅拷贝

    最近在复习python相关的基础,然后想到了曾经面试遇到过深浅拷贝得问题,我想对于初学者来说,还是很有必要去学习的...

  • python深浅拷贝

  • Python深浅拷贝

    变量赋值 浅拷贝 只复制最顶层的列表

  • python深浅拷贝

    深复制与浅复制:浅复制不会克隆子对象,所以,复制出来的对象和原对象并非完全不相关,根据以下代码大致感觉是复制得到的...

  • python深浅拷贝

    浅拷贝 浅拷贝copy.copy是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝里面的内容。 cop...

网友评论

      本文标题:python深浅拷贝

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