当前位置: 首页 > 面试题库 >

Python将1和True设置为插值

巩选
2023-03-14
问题内容

在IPython 3交互式shell中:

In [53]: set2 = {1, 2, True, "hello"}

In [54]: len(set2)
Out[54]: 3

In [55]: set2
Out[55]: {'hello', True, 2}

那是因为1和True获得相同的插值,所以考虑到集合消除了重复项,所以只有其中一个(True)得以保留?我们如何保持两者?


问题答案:

集合是哈希的集合。即使该语句1 is True为False,该语句1 == True为True。因此,它们具有相同的哈希值,并且不能单独存在于集合中,并且 不能将它们都保留在集合中

编辑 使其明确,正如jme指出的,这是因为这两个都是正确的-它们相等(per
__eq__)并且具有相同的哈希值(per
__hash__)。

在理想情况下,相等的对象也将具有相同的哈希值,并且值得庆幸的是,对于内置类型而言,这是正确的。



 类似资料:
  • 我已经用PyCharm建立了我的第一个烧瓶项目,这是我的应用程序。py文件: 我想在调试模式下运行我的项目,这样我就不必每次发生变化时都重新启动服务器。我提供应用程序。使用debug=True参数运行函数,但这似乎不会更改调试标志。然而,应用程序确实启动了,我确实在页面上看到了“TEST”,但这是在调试标志设置为False的情况下进行的。 我还尝试直接用os.environ["FLASK_DEBU

  • 问题内容: 我的交互式控制台的简要记录: 到底为什么呢? 编辑: 为了对比起见,请考虑运算符。 这使得有很大的意义,因为虽然和都意味着同样的事,作为一个条件语句,他们真的是不一样的东西。 再次编辑: 更有趣的后果: 问题答案: 因为Python中的Boolean是整数的子类型。从文档中: 布尔值是两个常量对象False和True。它们用于表示真值(尽管其他值也可以视为假或真)。在数字上下文中(例如

  • 问题内容: 我一直想知道为什么JDBC API提供了自动提交模式()。似乎很吸引人的麻烦只是诱使人们陷入麻烦。我的理论是,仅将其添加到JDBC是为了简化希望创建使用JDBC编辑和运行SQL的工具的供应商的生活。是否有其他原因打开自动提交,还是总是错误? 问题答案: 不幸的是,使用自动提交是特定于数据库的(事务行为也是如此)。我认为,如果您没有全局的程序化交易策略,自动提交可能比仅希望每个人都正确关

  • 我试图在beforeUpdate事件中更改域对象的属性。问题是更改后的属性没有到达数据库。有问题的域类将dymanicUpdate设置为true。我注意到,如果我将DynamicUpdate更改为false,该属性将持久化到DB。 我用GORM 6.0.11创建了一个简单的Grails 3.2.9项目,其中只有一个域类。 默认情况下,DynamicUpdate设置为false,我在beforeUp

  • 问题内容: 我真的很喜欢将sequelize用作我的节点应用程序的ORM,但是现在,当默认情况下在查询时它们传递DAO对象时,我有点恼火。如何始终将raw选项设置为true? 问题答案: 根据文档: 如果您不提供SQL以外的其他参数,则将raw假定为true,并且sequelize将不会尝试对查询结果进行任何格式化。 话虽如此 : Sequelize对象具有[options.query = {}]

  • 我不得不问这是一个好的做法吗?好心地建议使用它的优点和缺点(利弊)。