今天通过[[v]*n]*n
快速创建列表, 当我使用索引修改值时, 本来是打算修改a[0][0]
这一个元素的第一个值, 但是打印结果却将三个元素第一值都修改了,所以就记录一下!
遇到的问题
>> data = [[0] *3] *3
>> data
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>> data[0][0] = 1
>> data
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
通过一番研究
>> id(data[0])
836879108296
>> id(data[1])
836879108296
>> id(data[2]) # 可以发现,三个元素使用的是同一个内存地址编号
836879108296
# 推荐使用这种方法或者使用列表推导式
>> data2 = [[1,2,3],[4,5,6],[7,8,9]]
>> id(data2[0])
836879107208
>> id(data2[1])
836879108552
>> id(data2[2])
836879109960
# 使用列表推导式
>> data3 = [[1,2] for i in range(10)]
>> data3[0][0] = 100
[[100, 2], # 只是修改了第一个元素的第一个值
[1, 2],
...
[1, 2]]
# 查看内存地址
>> id(data3[0])
836879107528
>> id(data3[1])
836848339912