为什么id(字符串)不返回字符串的地址

时间:2010-07-02 11:20:06

标签: python ctypes

import ctypes

a = 'abc'
b = ctypes.string_at(id(a), 3)
c = ctypes.string_at(id(a) + 20, 3)

我希望b的结果是'abc',但事实并非如此;并且c的结果是'abc'。 我不知道为什么。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:6)

在Python中,str是一个对象,所以不能保证它在内存中的样子。可能它包含更多信息,比如字符串的长度。在您的情况下,这个“元数据”的大小显然是20个字节。

可能,对象本身甚至不包含实际的字符串,而是指向它的指针。如果是这种情况,在您的情况下,实际的字符串恰好位于对象之后的20个字节。

无论哪种方式,这都是一个实现细节。在任何严肃的代码中都不应该依赖这种行为。