Одним из наиболее запутанных аспектов в 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]]
Как уже упоминалось в различных других сообщениях SO, таких как этот , правильный способ создания экземпляра без каких-либо ссылок будет следующим:
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
, есть ли способ проверить массив таким образом, чтобы он показал, что он использует ссылки?Простая печать массива не будет раскрывать ссылки.