【发布时间】:2012-09-07 05:32:31
【问题描述】:
我需要创建一个虚拟对象来标记列表中未初始化的元素(显然,字典会是更好的选择,但由于内存限制,我需要一个列表)。
我正在考虑为此目的使用具有以下属性的对象:
- 它不等于除自身之外的任何其他对象。
- 只能从原始引用(通过赋值或参数传递)创建对其的引用。
None 满足第一个但不满足第二个要求(因为它可以使用文字 None 在程序中的任何位置创建)。
我认为应该可行的一种方法是:
UNINITIALIZED_VALUE = object() # will be compared for == through identity
a = [1, UNINITIALIZED_VALUE, 2, UNINITIALIZED_VALUE]
a[1] == a[3] # True
a[0] == UNINITIALIZED_VALUE # False
我想再次确认我没有遗漏这种方法的任何潜在问题。 (我使用的是 Python 3。)
【问题讨论】:
-
除了你不是用身份测试,你是在用平等进行测试。使用
a[0] is UNINITIALIZED_VALUE。现在,对于实际上没有任何差异的简单对象。但这是事情的原理。 ;-) -
@LennartRegebro 我添加了一个答案来解决您的评论。
标签: python python-3.x constants identity initialization