说明一下Python中列表乘法生成列表与直接写出列表的不同。
首先说一下需要列表乘法生成列表的情况:
比如,我们初始化一个0列表,我们可以[0]10,生成一个长度为10的全0列表,这样做没问题
再比如,我们嵌套列表初始化一个矩阵,类似[[],[],[]],我们可以用[[]]3,但是这里就有问题了。[0]10与[[]]3不同之处在于0是不可变对象,[]是可变对象,列表乘法所生成的大列表中小列表之间的关系是引用
用代码来说明一下:test_list = [[]]*3 print id(test_list[0]) print id(test_list[1]) print id(test_list)
结果:
394401363944013640163400
这意味着,test_list里面每个元素都是id39440136
这个列表元素的索引,这样我们就没法实现多个列表分开存储的需求
如果是列表加法和直接写列表的话,列表中每个元素都是独立的对象。
较好的方式产生预想的效果的话可以使用
[ [] for i in range(3) ]