我使用的是Python 3.6.5,但遇到了一个奇怪的现象:float('50.0')
与float(50.0)
是不同的,尽管它们 彼此相等。
我运行了一些代码来找出差异。除了python说它们不一样外,我找不到区别。我很困惑。如果有人可以解释这里发生的事情,我会很喜欢。
这是我的测试:
if float('50.0') is float(50.0):
print("float('50.0') is float(50.0)")
else:
print("float('50.0') is not float(50.0)")
if float('50.0') == float(50.0):
print("float('50.0') == float(50.0)")
else:
print("float('50.0') != float(50.0)")
if float('50.0') is 50.0:
print("float('50.0') is 50.0")
else:
print("float('50.0') is not 50.0")
if float(50.0) is 50.0:
print('float(50.0) is 50.0')
else:
print('float(50.0) is not 50.0')
if float(50.0) is float(50.0):
print('float(50.0) is float(50.0)')
else:
print('float(50.0) is not float(50.0)')
xstr_float = float('50.0')
norm_float = float(50.0)
print ('xstr_float: {0:.100f}'.format(xstr_float))
print ('xstr_float is of type:{}'.format(type(xstr_float)))
print ('norm_float: {0:.100f}'.format(norm_float))
print ('norm_float is of type:{}'.format(type(norm_float)))
和我的结果:
float('50.0') is not float(50.0)
float('50.0') == float(50.0)
float('50.0') is not 50.0
float(50.0) is 50.0
float(50.0) is float(50.0)
xstr_float: 50.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
xstr_float is of type:<class 'float'>
norm_float: 50.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
norm_float is of type:<class 'float'>
基于评论中的一些讨论,我尝试了以下操作,但得到的结果无法回答问题:
x = float(50.0)
y = float(50.0)
if x is y:
print('x is y')
else:
print('x is not y')
x=12345
y=12345
if x is y:
print('x is y')
else:
print('x is not y')
导致:
x is y
x is y
更新:我标记了一个正确的答案,并基于对该答案的评论,向其他可能困惑我所缺少的人展示
当python创建对象时,会为其分配一个ID。比较两个对象返回相同的ID时,is
返回true。有时python将缓存并重用对象。因此,在x is y
的情况下,由于ID相同,因此可以看到已给定并重用了一个对象。我们还看到ID在python会话之间发生了变化:
x=12345
y=12345
if x is y:
print('x is y')
else:
print('x is not y')
print('x_id: {}'.format(id(x)))
print('y_id: {}'.format(id(y)))
产生
x is y
x_id: 2476500365040
y_id: 2476500365040
,并在下次运行时显示
x is y
x_id: 2234418638576
y_id: 2234418638576
如果由于某种原因无法重复使用同一对象来表示x和y,那么x is y
将返回false。
答案 0 :(得分:5)
我认为您一开始可能也会感到困惑。 is
与==
不同。
is
将返回True
。
==
将返回True
。
这个问题帮助我理解了这个问题:
Is there a difference between ==
and is
in Python?