桃某人 发表于 2022-1-12 21:14:01

关于浅拷贝和深拷贝了解模糊了,有前辈指点一下吗

举个例子;
a=
b=a
那么a和b的具体内容都是,且这个的存储地址是一模一样的,如果对a进行修改的话,b也会发生改变
即a=0
a=
b=

如果是深拷贝的话,我理解成a和b都是,但是a,b两者的存储地址是不同的,即:a发生改变,b不会改变。

当我回顾视频里的例子
x=
y=x[:]
x=1
x=
y=             我就开始纳闷了,这是怎么一回事





kogawananari 发表于 2022-1-12 21:16:33

第一个是别名 第二个是浅拷贝

大马强 发表于 2022-1-12 22:19:14

这不就是a改变b不改变吗

桃某人 发表于 2022-1-12 23:01:42

kogawananari 发表于 2022-1-12 21:16
第一个是别名 第二个是浅拷贝

如果是浅拷贝的话,x和y不是应该一样吗
就像:
    >>> x = [, , ]
    >>> y = x.copy()
    >>> x = 0
    >>> x
    [, , ]
    >>> y
    [, , ]

涟漪袅袅 发表于 2022-1-13 11:02:34

第一个是赋值(复制),只是对对象的引用,就像是【1,2,3】贴了a,b两个标签一样,只要变了,a,b就会变
第二个是浅拷贝(浅复制),只是复制了对象的外层结构,对内层依旧是引用,所以当你的列表里的列表的元素(这个就是内层结构)改变时,就会像复制一样都改变,而如果你改变的是列表里的元素就是x的【1,2,3】,【4,5,6】,【7,8,9】整体(外层结构),y就不会随着x的变化而变化,比如试一下
>>> x=,3]
>>> y=x.copy()
>>> x=
你会发现结果变成了
>>> x
, 3]
>>> y
, 3]
另外,对于深拷贝(深复制),目前只有copy模块的deepcopy()函数,它是对对象从外层结构到内层结构都复制了,无论x怎么变,y都不会跟着变
总的来说,赋值是最不坚定的,只要你变了他就变了,浅拷贝则看中你的内在,你的外在怎么变不重要,当你的内在变了他才会跟着变,而深拷贝则是最坚定的,他不在意你,他只是他自己,不会随着任何人的改变而改变。
对于对象是否随着原对象的改变而改变,可以这么看,如果你还要深究他们的内部存储空间是否一致的话,那就还要分这个对象是可变的还是不可变的,详细的可以看下面的链接
Python中的赋值(复制)、浅拷贝与深拷贝 - 晚来天欲雪的文章 - 知乎 https://zhuanlan.zhihu.com/p/54011712
页: [1]
查看完整版本: 关于浅拷贝和深拷贝了解模糊了,有前辈指点一下吗