以下代码在我的脚本中表现不正确:
from ctypes import *
base_addr = c_uint64(0)
base_addr_temp = c_uint64(0)
print base_addr
print base_addr_temp
if(base_addr == base_addr_temp):
print "val"
我得到的输出:
c_ulong(0L)
c_ulong(0L)
我正在使用python 2.7.3版本。
答案 0 :(得分:5)
我认为因为这些是对象,你必须按值比较它们:
base_addr.value == base_addr_temp.value
自从我完成任何Python以来已经有一段时间了,但在许多语言中,如果两个对象实际引用相同的对象(即引用内存中的相同位置),则它们只被视为“相等”。
答案 1 :(得分:2)
您的比较是在两个对象(“base_addr”和“base_addr_temp”)的地址之间,而不是两个对象的值(均为0L)之间
奇怪的是,在windows 2.7.3 base_addr。 str ()返回'c_ulonglong(0L)',这与你看到的不一样 - 但这不会改变你比较的事实数据位置而不是值。