如何重新分配此矩阵的第一个索引' a'没有改变' b'?

时间:2017-04-23 14:29:41

标签: python-2.7

我试图在不改变矩阵b的情况下改变[0] [0]。是否有捷径可寻?我试图使用b = list(a)和b = a [:]但没有运气。

a = [[1,2,3,4],[1,2,3,4]]

b = a


print(a)
print(b)

a[0][0] = "WWWW"

print(a)
print(b)

输出:

[[1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4]]
[['WWWW', 2, 3, 4], [1, 2, 3, 4]]
[['WWWW', 2, 3, 4], [1, 2, 3, 4]]

这有效但似乎有更好的方法吗?

a = [[1,2,3,4],[1,2,3,4]]

b = [[0,0,0,0], [0,0,0,0]]

for i in range(len(a)):
    for j in range(len(a[i])):
        b[i][j] = a[i][j]


print(a)
print(b)

a[0][0] = "WWWW"

print(a)
print(b)

输出:

[[1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4]]
[['WWWW', 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4]]

1 个答案:

答案 0 :(得分:0)

列表是可变的。

This link explains in detail what mutable objects are

这不适用于您的代码,因为您使用的是嵌套列表。如果你只做一个[0] ="某事",这不会反映在b中但是如果你做这样的事情[0] [0] ="哇&# 34;这个会。

 b = a[:] 

a和b中的嵌套列表仍指向同一块内存。

要解决这个问题,请尝试:

import copy
a = [[1,2,3,4],[1,2,3,4]]
b = copy.deepcopy(a)
  

Explained in detail here