Python3中初始化一个多维数组,通过for range
方法。以初始化二维数组举例:
arr = [[] for i in range(5)]
>>> [[], [], [], [], []]
arr = [[0, 0] for i in range(5)]
arr[2].append(2)
>>> [[0, 0], [0, 0], [0, 0, 2], [0, 0], [0, 0]]
初始一个一维数组,可以使用*或者for range
arr1 = [None for i in range(5)]
>>> [None, None, None, None, None]
arr2 = [None]*5
>>> [None, None, None, None, None]
但是用*初始化二维数组则会在修改数组内容时出现错误,例如:
arr = [[0, 0]]*5
arr[2] = 2
>>> [[0, 0], [0, 0], 2, [0, 0], [0, 0]] # 直接复制不会出现错误
arr[2].append(2)
>>> [[0, 0, 2], [0, 0, 2], [0, 0, 2], [0, 0, 2], [0, 0, 2]]
arr[2][1] = 5
>>> [[0, 5], [0, 5], [0, 5], [0, 5], [0, 5]]
而使用for range
初始化不会产生该问题,range会另外开辟一个新的内存地址;*会指向同一个内存地址,改变值会其内存地址指向的值,从而改变所有的值。