python中比较混乱的一个方面是实例化一个列表列表(假设一个列表没有使用numpy)——例如,如果一个人试图通过简单的乘法来实现它,那么最终会得到引用副本:
In [1]: a = [[0] * 4] * 4
In [2]: a
Out[2]: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
In [3]: a[0][1] = 1
In [4]: a
Out[4]: [[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
如其他文章所述
this one
,没有任何引用的正确实例化方法如下:
In [5]: b = [[0 for i in range(4)] for i in range(4)]
In [6]: b
Out[6]: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
In [7]: b[0][1] = 1
In [8]: b
Out[8]: [[0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
问题是,假设一个人确实定义了他们的列表
a
,是否有方法检查数组,使其显示正在使用引用?仅仅打印数组不会显示引用。