据我所知,Python将Lists存储为内存中的“数组”;但是,“array”存储指向List中PyObject的指针。
我正在使用hex(id(...))
来查看列表的内存地址以及列表中的所有项目。但我也希望看到“数组”位置的内存位置。
到目前为止,这是我的翻译代码......
>>> def memory_locations_of(value):
for index, element in enumerate(value):
print("{: <15}{}\n{: <15}{}\n".format("index[" + str(index) + "] ", hex(id(element)), str(element), hex(id(str(element)))))
>>> a = ["hello", "world", "!", "!"]
>>> a
['hello', 'world', '!', '!']
>>> memory_locations_of(a)
index[0] 0x34b4bc0
hello 0x34b4bc0
index[1] 0x4053dc0
world 0x4053dc0
index[2] 0x3616620
! 0x3616620
index[3] 0x3616620
! 0x3616620
>>> a[0] = "Hello"
>>> a
['Hello', 'world', '!', '!']
>>> memory_locations_of(a)
index[0] 0x406e260
Hello 0x406e260
index[1] 0x4053dc0
world 0x4053dc0
index[2] 0x3616620
! 0x3616620
index[3] 0x3616620
! 0x3616620
>>> hex(id(a))
'0x3f7cc10'
最后两行是我想要的最接近的内存位置。该内存位置是实际List的位置。那也应该是实际a [0]位置的位置(或非常靠近它)。我还想获得1,a [2]和[3]的真实位置。它基于我的代码,它们应该在'0x3f7cc10' + "index_offset"
。
是否有一种简单的方法可以解决这个问题,还是设计得很好?