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'.我不知道为什么.有谁能解释我?
在Python中,a str是一个对象,因此无法保证它在内存中的外观.可能它包含更多信息,比如字符串的长度.在您的情况下,此"元数据"的大小显然是20个字节.
可能,对象本身甚至不包含实际的字符串,而是指向它的指针.如果是这种情况,在您的情况下,实际的字符串恰好位于对象之后的20个字节.
无论哪种方式,这都是一个实现细节.在任何严肃的代码中都不应该依赖这种行为.
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |