list 通过乘法得出的列表的本质
list = [[]]*5
print(list) # [[], [], [], [], []]
list[0].append(10)
print(list) # [[10], [10], [10], [10], [10]]
list[1].append(20)
print(list) # [[10, 20], [10, 20], [10, 20], [10, 20], [10, 20]]
list[3].append(1111)
print(list)
list.append('end')
print(list)
结果:
[[], [], [], [], []]
[[10], [10], [10], [10], [10]]
[[10, 20], [10, 20], [10, 20], [10, 20], [10, 20]]
[[10, 20, 1111], [10, 20, 1111], [10, 20, 1111], [10, 20, 1111], [10, 20, 1111]]
[[10, 20, 1111], [10, 20, 1111], [10, 20, 1111], [10, 20, 1111], [10, 20, 1111], 'end']
本质: 开始列表的乘法并不是创建了5个简单的列表,而是创建了一个列表,能够被5次引用,引用的是一个列表
第一行的输出结果直觉上很容易理解,例如 list = [ [ ] ] * 5 就是简单的创造了5个空列表。 然而,理解表达式list=[ [ ] ] * 5的关键一点是它不是创造一个包含五个独立列表的列表,而是它是一个创建了包含对同一个列表五次引用的列表。 只有了解了这一点,我们才能更好的理解接下来的输出结果。