#python #list #append
Вопрос:
Мне нужно немного света, чтобы прояснить, что происходит в этом игрушечном примере:
A = []
X = [[1, 2, 3],[4, 5, 6]]
B = -1
for i in range(2):
S = X[i]
A.append(S)
for j in range(3):
T = S[j]
S[j] = B
A.append(S)
S[j] = T
print('nFinal shape of A after completion {}'.format(A))
Я ожидал получить в результате A как:
[[1, 2, 3],
[-1, 2, 3],
[1, -1, 3],
[1, 2, -1],
[4, 5, 6],
[-1, 5, 6],
[4, -1, 6],
[4, 5, -1]]
… но я получаю это:
[[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[4, 5, 6],
[4, 5, 6],
[4, 5, 6],
[4, 5, 6]]
Комментарии:
1.
A.append(S)
не делает копию списка. ВоспользуйсяA.append(S.copy())
Ответ №1:
Вы должны использовать .copy()
A = []
X = [[1, 2, 3],[4, 5, 6]]
B = -1
for i in range(2):
S = X[i].copy()
A.append(S.copy())
for j in range(3):
T = S[j]
S[j] = B
A.append(S.copy())
S[j] = T
print('nFinal shape of A after completion {}'.format(A))
Комментарии:
1. Большое вам спасибо! Очевидно, пожалуйста, поправьте меня, если я ошибаюсь, когда я использую « S = X[i]`, он приписывает указатель только на S, который указывает на исходную строку в X?
2. Да, это именно так