Python None 比较:何时使用“is”与 ==
在 Python 中使用 None 值时,开发人员经常使用两个“是”和“==”进行比较。虽然这两种方法在语法上都是有效的,但建议的选择取决于比较的预期目的。
通常,在检查对象身份时首选“is”,这意味着两个变量是否引用内存中完全相同的对象。相反,“==”检查相等性,这可能因对象的实现而异。
考虑以下自定义类,它重写 eq 方法来定义与对象标识不同的等价性:
class Negator(object): def __eq__(self,other): return not other thing = Negator() print(thing == None) # True print(thing is None) # False
在此示例中,“==”返回 True,因为 Negator 的 eq 方法会覆盖默认行为。然而,“is”返回 False,因为这两个变量并不引用同一个对象。
在处理对象标识不重要的自定义类时,“==”是检查相等性的适当选择。例如,如果你想比较两个列表的内容,你可以使用“==”:
lst = [1,2,3] lst == lst[:] # This is True since the lists are "equivalent" lst is lst[:] # This is False since they're actually different objects
相反,如果你想专门检查两个变量是否指向完全相同的对象内存中,“is”是首选比较运算符。当使用可变对象(例如字典或列表)时,这一点尤其重要,如果它们是同一对象,则更改一个实例可能会影响另一个实例:
a = [1, 2, 3] b = a b.append(4) print(a, b) # Output: [1, 2, 3, 4], [1, 2, 3, 4] c = [1, 2, 3] d = c d is c # True (same object in memory)
以上是Python None 比较:什么时候应该使用'is”与'==”?的详细内容。更多信息请关注PHP中文网其他相关文章!