我有一个愚蠢的问题:
例如,我有一个数组
x = [[1,1,1],[1,1,1],[1,1,1]]
如果是
x[1][:] = [9 if x[1][k] == 1 else 0 for k in range(3)]
我会得到
[[1, 1, 1], [9, 9, 9], [1, 1, 1]]
但是在这种情况下
x[:][1] = [9 if x[k][1] == 1 else 0 for k in range(3)]
我会得到
[[1,1,1],[1,1,1],[1,1,1]]
为什么?
对于 numpy 来说这不是问题,一切正常,但是为什么对于原始 Python 来说这是一个问题?
您对任何其他作业都会有相同的行为:
x[:][1] = 'hello'
print(x) # unchanged
这是因为您正在分配给
x
的副本(这不是 numpy,因此 x[:]
不是视图而是副本),您不持有该副本并立即将其丢弃。
你正在做的事情相当于:
y = x[:]
y[1] = 'hello'
print(x) # unchanged
print(y) # changed