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

zha*_*nwu 2 python ctypes

import ctypes

a = 'abc'
b = ctypes.string_at(id(a), 3)
c = ctypes.string_at(id(a) + 20, 3)
Run Code Online (Sandbox Code Playgroud)

我希望b的结果是'abc',但事实并非如此; 并且c的结果是'abc'.我不知道为什么.有谁能解释我?

Tho*_*mas 6

在Python中,a str是一个对象,因此无法保证它在内存中的外观.可能它包含更多信息,比如字符串的长度.在您的情况下,此"元数据"的大小显然是20个字节.

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

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