为何部分Python对象必然指向唯一实例?
关于Python中对象同一性(
is判断)的疑问 我明确知道is用于检查对象的id是否匹配(即是否为同一个对象),==用于检查值是否匹配,现在的问题不是要区分这两者的用法,而是想搞懂以下现象的底层原因:
>>> x = 3 >>> y = 3 >>> x is y True >>> m = 3.0 >>> n = 3.0 >>> m is n False >>> x = "spam" >>> y = "spam" >>> x is y True >>> a = ("s","p","a","m") >>> b = ("s","p","a","m") >>> a is b False
从上述示例可见,str和int类型变量在值相同时,会自动指向同一对象,但tuple或float类型却并非如此。我希望了解该现象的本质原因,而非仅知晓各类型的表现情况。
此外,bool和NoneType也存在类似str、int的现象,但function没有。我已排除不可变性的影响——毕竟整数与浮点数均为不可变类型,却表现出差异。
还有一个特殊场景会改变该行为:
>>> def same(x, y): ... u = x ... v = y ... return u is v ... >>> same(1.0, 1.0) True
内容的提问来源于stack exchange,提问作者Mikke Mus
相关产品推荐
相关产品推荐

