import ctypes
a = 'abc'
b = ctypes.string_at(id(a), 3)
c = ctypes.string_at(id(a) + 20, 3)
Je m'attends à ce que le résultat de b soit 'abc', mais ce n'est pas le cas; et le résultat de c est 'abc'. Je ne sais pas pourquoi. Tout le monde peut m'expliquer?Pourquoi l'id (chaîne) ne retourne pas l'adresse de la chaîne
Exactement à droite. En Python 2.6, les métadonnées sont constituées de: (1) un pointeur vers le type d'objet, (2) le nombre de références, (3) la taille de la chaîne, (4) une valeur mise en cache pour le hachage de l'objet,) un drapeau indiquant si cette chaîne est internée ou non. À 4 octets pour chacun de ces champs (sur une machine 32 bits), cela explique le décalage de 20 octets. –
alors est-il un moyen d'accéder à la mémoire d'une chaîne? – zhanwu
@ Mark Dickinson, donc je peux toujours avoir le tampon si je fais le décalage de 20 octets? il n'est pas seulement arrivé que 20 travaillent pour moi une fois, et la prochaine ne sera pas, non? – zhanwu