2010-07-02 7 views

Répondre

6

En Python, un str est un objet, donc il n'y a aucune garantie sur ce à quoi il ressemble en mémoire. Probablement, il contient plus d'informations, comme la longueur de la chaîne. Dans votre cas, la taille de cette "métadonnée" est apparemment de 20 octets.

Eventuellement, l'objet lui-même ne contient même pas la chaîne actuelle, mais plutôt un pointeur. Si tel est le cas, dans votre situation, la chaîne réelle se trouve à 20 octets après l'objet.

Dans les deux cas, il s'agit d'un détail d'implémentation. Aucun de ces comportements ne devrait être utilisé dans un code sérieux.

+1

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. –

+0

alors est-il un moyen d'accéder à la mémoire d'une chaîne? – zhanwu

+0

@ 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

Questions connexes