python列表之复制

学过python 列表一章的想必都知道,
列表的复制

a = [2,3,4]
#复制
b = a[:]

没错,复制的确是这样。
为什么要复制,为了 在使用到a列表内的数据时 不会对a列表中的数据产生修改,丢失。
所以就使用a 的复制品 b
一样的作用,使用起来更随意,还不用担心数据丢失

没接过的可能会想

b = a

这样不就行了吗
哈哈,不行哦
b = a
这样的叫列表赋值 而之后 a与b 指向同一块地址
在这里插入图片描述
这时的a就是b ,b就是a 无真假之分
当 b 被修改之后 a 中的数据也随之改变
一维的复制我们知道
让你更透彻的理解复制 浅复制、深复制

b = a[:]

这样一种方法去复制

但二维的这样行不行呢?

a = [[1,2],[3,4],[5,6]]
b = a[:]

输出 b 会是怎样的?
在这里插入图片描述
从上图可以看到
输出的 b 的确和 a一模一样
那我们改一改 b 看 b是不是货真价实的赝品

b.append([9,9])
print(b)
print(a)

在这里插入图片描述
我们发现好像二维 的这样复制也是行得通的
那我们再看看下面的情况

b[1].append(9)
print(b)
print(a)

在这里插入图片描述
我们会发现在b的第二个列表 添加元素时 a 也发生了一样的行为

前面,不是还行得通,怎么在改变 b 的元素列表内的元素时 就影响到 a 了呢

那么这样的复制方式不再能达到我们复制的目的

为什么会如此?
b = a
a是一个二维列表
当复制给b 的时候 b会在内存空间内开辟一个新的空间
在这里插入图片描述
从图可知道,b的确是另起炉灶了。

所以我们在修改列表b的元素(第一层元素)时不会影响到a
但是 在修改元素的元素(第二层元素)时 a就发生了相应改变
那也就是说
二维列表a 内存储的一维列表 其实是一个个指向某存储空间的地址指针(请允许我这么说,因为python是用c写的)
当 把 a 复制一遍的时候 a[:]与a 内的一维列表地址是没有变的
而因为 地址一样所以 只要是从a赋给b的,不论是在b中修改一维列表内的元素还是在a中修改 操作指令的对象都是指向同一处 也就是针对同一个对象。
在这里插入图片描述
上图变说明了这一点
a [1] 的地址与b[1] 的是一样的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值