Python-二维列表改变元素

      在声明二维列表后,改变列表中的某一元素,发现该列的元素都发生了改变:

a = [[0]*3]*4
print(a)
a[0][0] = 1
print(a)

      如代码所示,声明了一个3*4的元素全为0的二维列表,试图改变列表中第一行第一列的元素为1,结果如下:

[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]

      可以发现,二维列表中第一列元素均变为1。

      这是Python中的深浅拷贝的原因,声明二维列表时出现了问题,这种声明只是对一维列表[0,0,0]的4次浅拷贝,a = [[0]*3]*4语句对[0]*3复制了4次,对其中一个[0,0,0]改变,剩下的都会发生改变。

查阅资料发现:
list * n -> n shallow copies of list concatenated
n个list的浅拷贝的连接

      可以通过深拷贝的方式解决该问题,声明如下:

a = [[0]*3 for i in range(4)]
print(a)
a[0][0] = 1
print(a)

      运行结果如下:

[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

      我是在做力扣97题时遇到的,分享一下:https://leetcode.cn/problems/interleaving-string/description/

猜你喜欢

转载自blog.csdn.net/fzz97_/article/details/129340984
今日推荐