我在Python中有以下示例设置:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<img alt="no data" th:src="@{D:\images\1r-product-6.jpg}">
</body>
</html>
是
a = list(frozenset(['haha', 'lol']))
b = list(frozenset(['lol', 'haha']))
总是返回 True 吗?
相同设置的 frozenset 的 list 是否可以通过上述设置返回 False ?
答案 0 :(得分:2)
(冻结)集之间的等价语义是,如果它们包含等效项,则它们是等效的。集合没有顺序。
但是,由于列表具有顺序,因此对列表的强制转换有可能导致它们不相等(取决于(冻结)集合上的迭代顺序-这是实现的详细信息)。
以下是内部实现中发生冲突的示例,该冲突由于插入顺序(这在CPython实现中)而导致不同的迭代顺序:
>>> a = list(frozenset([1, 9]))
>>> b = list(frozenset([9, 1]))
>>> a == b
False
带有字符串的示例:
首先我们需要找到一个碰撞(我不再赘述):
>>> hash('1') % 8
0
>>> hash('2') % 8
5
>>> hash('3') % 8
2
>>> hash('4') % 8
3
>>> hash('5') % 8
1
>>> hash('6') % 8
4
>>> hash('7') % 8
5 # same as '2' ! Found!
现在,我们需要以不同的顺序添加到集合中以引起重新哈希(同样,不再赘述):
>>> s1, s2 = '2', '7'
>>> a = list(frozenset([s1, s2]))
>>> b = list(frozenset([s2, s1]))
>>> a == b
False