浅copy变化原因

来源:互联网 发布:淘宝卖家拍照技巧 编辑:程序博客网 时间:2024/06/06 04:30

浅copy变化和内存指针变化有关

首先,弄懂赋值变化时内存中指针的变动,如下图

这里写图片描述

>>> a = 4>>> b = a>>> a  #此时a b 都为44>>> b4>>> id(a)10914464>>> id(b)  # 此时a和b的内存地址指向完全一致10914464>>> b = 5>>> b  # b发生变化,而a没有5>>> a4>>> id(a)  # 可以看到a和b的内存地址完全不同了10914464>>> id(b)10914496

浅copy基本上和赋值的变化差不多

分为2种情况,值为非可迭代对象和可迭代对象时,结果分别为各自独立和同步变化

  • 1.当值为非可迭代对象时,原对象a和copy对象b,是互不干扰,各自独立的

这里写图片描述

>>> a = [4,5,6]  # a,b都是一个列表>>> b = a.copy()>>> a[4,5,6]>>> b    # 此时a,b值一样[4,5,6]>>> b[0]=7>>> b[7,5,6]  # b发生变化>>> a[4,5,6]  # a无变化

这里写图片描述

  • 2.当值为可迭代对象时,这种情况发生了变化,原因如下
>>> a = [[1,2],4,5]>>> b = a.copy()>>> a[[1,2],4,5]>>> b[[1,2],4,5] #此时a,b相同

这里写图片描述

>>> b[0][0] = 3  # 对b进行修改>>> b[[3,2],4,5]>>> a[[3,2],4,5]  # a跟随b发生了变化

这里写图片描述

这里list是一个可迭代对象,当list内部值变更时,调用它的a和b两个list也就都随之发生了变化