python - 为什么 Python 引用相等不起作用?
问题描述
我有一个带有数组的类,名为self.sheets
. 我有一个函数,find_sheet
如果传递了字符串,它将对标题进行比较,或者如果传递了 a,则进行引用比较Worksheet
。这是一个最小的可重现示例:
class Worksheet:
pass
class Spread:
@property
def sheets(self):
return [Worksheet() for i in range(5)]
def find_sheet(self, sheet):
for ix, obj in enumerate(self.sheets):
print("comparing {} is {}".format(id(obj), id(sheet)))
if obj is sheet:
print("found you")
s = Spread()
s.find_sheet(s.sheets[0])
这输出comparing 140134415396760 is 140134393512344
解决方案
我发现了我的问题。当我提到 时s.sheets
,它每次都调用属性函数并生成一个新列表。所以当我通过时s.sheets[0]
,它实际上是一个与迭代时第一个对象不同的对象self.sheets
。
这里的教训是......使用属性时要小心,它们的行为与变量不同。
推荐阅读
- typescript - 承诺链 - 等待长时间运行
- python - 如何从 1 个独立列预测多个依赖列
- css - 使用 by,linktext 时无法定位元素
- wordpress - 我如何将 codestar 框架与 WordPress 主题集成?
- flutter - 推后如何在脚手架树中弹出抽屉
- cakephp - CakePHP 教程错误:对 /users 的请求没有应用任何授权检查
- html - Vuetify DataTable - 垂直对齐单元格内容
- python - Python Azure 事件中心使用事件属性
- css - 符合内容大小的网格框
- c# - 在 System.Windows.Data.ListCollectionView 中导航项目时,CurrentPosition 和当前索引不同步