【发布时间】:2014-07-30 11:27:57
【问题描述】:
在 Python 中,在每次迭代开始时将变量重新分配给原始值(在循环之前定义)时,您会使用 [:]。也就是说:
original_1D = ['o', 'o', 'o']
for i in range(0,3):
new = original_1D[:] # revert back to 'original_1D' list defined before loop
new[i] = 'X'
print new
产生期望和预期的输出:
['X', 'o', 'o']
['o', 'X', 'o']
['o', 'o', 'X']
如果原始列表是多维的 (original_2D),就会出现我的问题。例如:
original_2D = [['o', 'o', 'o'],['o', 'o', 'o']]
for i in range(0,3):
new = original_2D[:] # revert back to 'original_2D' list defined before loop
new[0][i] = 'X'
print new
由此,我想要以下输出:
# Desired
[['X', 'o', 'o'], ['o', 'o', 'o']]
[['o', 'X', 'o'], ['o', 'o', 'o']]
[['o', 'o', 'X'], ['o', 'o', 'o']]
但是没有!我明白了:
# Actual
[['X', 'o', 'o'], ['o', 'o', 'o']]
[['X', 'X', 'o'], ['o', 'o', 'o']]
[['X', 'X', 'X'], ['o', 'o', 'o']]
好像original_2D 列表每次迭代都会被覆盖。
我做错了什么?
【问题讨论】:
标签: python loops variables iteration variable-assignment