2 回答

TA贡献1880条经验 获得超4个赞
首先是一些术语:您在这里谈论的是列表(而不是数组),它总是存储对其元素的引用。
检查列表中的所有引用是否都指向不同对象的一种快速方法是
>>> l1 = [[0, 1], [0, 1]]
>>> l2 = [[0, 1]]*2
>>>
>>> len(set(map(id, l1))) == len(l1) # no duplicates
True
>>> len(set(map(id, l2))) == len(l2) # duplicates
False
它只是检查nlength 列表中的对象是否有唯一的 id n。
如果您的列表有大量元素,那么懒惰地执行此操作并返回False第一个重复的 id可能会更有效。
def all_unique(lst):
seen = set()
for x in lst:
id_ = id(x)
if id_ in seen:
return False
seen.add(id_)
return True
... 像这样工作:
>>> all_unique(l1)
True
>>> all_unique(l2)
False

TA贡献1828条经验 获得超6个赞
您可以使用该id功能:
>>> a = [[0] * 4] * 4
>>> a
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> [id(sublist) for sublist in a]
[1975671202696, 1975671202696, 1975671202696, 1975671202696]
>>> b = [[0 for i in range(4)] for i in range(4)]
>>> b
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> [id(sublist) for sublist in b]
[1975671204808, 1975671205128, 1975671205000, 1975671204872]
如您所见,在 中a,id 都是相同的,而在 中b,它们是不同的。
添加回答
举报