【发布时间】:2015-05-11 21:34:54
【问题描述】:
看看这段代码:
import re
ti = "abcd"
tq = "abcdef"
check_abcd = re.compile('^abcd')
print id(check_abcd.search(ti))
print id(check_abcd.search(tq))
print check_abcd.search(ti)
print check_abcd.search(tq)
if check_abcd.search(ti) is check_abcd.search(tq):
print "Matching"
else:
print "not matching"
输出:
41696976
41696976
<_sre.SRE_Match object at 0x00000000027C3ED0>
<_sre.SRE_Match object at 0x00000000027C3ED0>
not matching
is的定义:
`is` is identity testing, == is equality testing.
is will return True if two variables point to the same object
1) 现在为什么is 不返回True 当id 和对象引用相同时。
2)当is 被== 替换时,它仍然返回false。这是使用== 比较对象时的预期行为。
【问题讨论】:
-
由于垃圾收集。
-
Python 在清除变量时重用 id 值。
-
@AshwiniChaudhary
Garbage collection??????任何链接或更多信息? -
@MartijnPieters 什么时候清除变量?
-
@vks: 当引用计数下降到 0 时。
标签: python