python 浅拷贝与深拷贝

cell=[1,2,3,4];
cell_copy=cell.copy()
print(cell_copy))
利用python里的copy方法可以对已知cell进行复制


如果对cell_copy中的元素进行改变 是否会影响cell中的元素

cell=[1,2,3,4];

cell_copy=cell.copy()

cell_copy[0]=8

print(cell_copy,cell)

更改cell_copy[0]=8


由结果可知cell并没有花生变化


那是否意味着cell_copy与cell没关联呢


看下面一个例子:

      

cell=[[1,2],3,4];

cell_copy=cell.copy()
print(cell_copy)

cell_copy[0][0]=8

print(cell_copy,cell)

结果可知 copy并简单只是复制cell中的元素 cell和cell_copy在有着联系  在上述情况改边cell_copy值 cell中元素也会发生改变

同理 改变cell值cell_copy中元素也会改变



上述代码在计算机内部示意图:

copy实际上是将b的指向地址指向a的指向地址 

当a或者b中指向改变时

开辟一个新内存0088 存储元素8

b[0][0]改变成8时 即0088地址指向改为0068

因为a、b的0088指针指向相同

所以当a或b改变时 两个中元素同时改变

由此时可知 copy只是浅拷贝 只拷贝了cell的一层地址


下面看下一个例子

a=1

b=a

b=2

注意比较cell_copy=cell

cell=[[1,2],3,4];
cell_copy=cell.copy()
cell_=cell
print(cell_)
print(cell_copy)

cell_[1]=7
print(cell_,cell)

cell_copy[2]=12
print(cell_copy,cell)

cell_copy[0][0]=8
print(cell_copy,cell)


上面那个简单的例子已经解释了cell_copy=cell 

cell_=cell相当于指向了cell指向的整体地址


所以只要cell cell_其中任意元素改变 同相当两个指向改变了  这个时候改变元素值 不会在开辟一个新的内存地址

cell和cell_还是同时指向了[[1,2],3,'from a']的整体地址


以上就是拷贝的部分知识!!!

第一次写博客

真鸡儿爽

反正也没人看

!!!


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值