Допустим, я хочу создать список списков для последующего заполнения, который выглядит следующим образом:
[['', ''], ['', ''], ['', '']]
Я могу создать его так:
rows=3
cols=2
A=['']*cols
B=[A[:]]*rows
Однако,внутренние списки - это один и тот же объект, как можно видеть:
B[0][0]='!'
print (B)
Вывод:
[['!', ''], ['!', ''], ['!', '']]
Это происходит, хотя я использовал B=[A[:]]*rows
вместо B=[A]*rows
;использование B=[A][:]*rows
не решает проблему.
Если A[:]
должно эффективно создать полную копию (а не просто ссылку) путем разрезания A, то почему это происходит?
PS
Очевидно, что это можно легко решить, например, с помощью:
this_text=[]
temp=[]
for i in range(cols):
A.append('')
for i in range(rows):
B.append(A[:])
Моя цель - улучшить понимание, а не создавать этот конкретный список списков.