Python n'a pas de types char ou byte pour stocker des caractères uniques ou des entiers de 8 bits. Vous pouvez utiliser des chaînes de longueur 1 pour représenter des caractères ou des entiers de 8 bits.
En Python, l'espace occupé par chaque caractère dans une chaîne est de bits (Apprentissage recommandé : Tutoriel vidéo Python)
>>> import sys >>> sys.getsizeof('') 37 >>> sys.getsizeof('a') 38
Comme vous pouvez. voyez, le caractère nul occupe 37 octets et la chaîne 'a' de longueur 1 occupe 38 octets de mémoire. Avec un caractère a de plus, il y a un octet de plus.
En Python, la chaîne est implémentée comme ceci
typedef struct { PyObject_VAR_HEAD long ob_shash; int ob_sstate; char ob_sval[1]; /* Invariants: * ob_sval contains space for 'ob_size+1' elements. * ob_sval[ob_size] == 0. * ob_shash is the hash of the string or -1 if not computed yet. * ob_sstate != 0 iff the string object is in stringobject.c's * 'interned' dictionary; in this case the two references * from 'interned' to this object are *not counted* in ob_refcnt. */ } PyStringObject;
Chaque caractère est stocké dans ob_sval, représentant 8 bits. Les 36 octets restants proviennent principalement de la macro PyObject_VAR_HEAD. En fait, l'implémentation de chaîne de Python utilise également une variable globale appelée *interned, qui peut stocker des chaînes de longueur 0 ou. 1, c'est-à-dire char, peut économiser de l'espace et accélérer.
En fait, il n'y a ni pointeurs ni "structures de données nues" (non-objets) en python, même la plupart des entiers simples sont implémentés de cette manière
typedef struct { PyObject_HEAD long ob_ival; } PyIntObject;
En bref, cette conception satisfait la philosophie de conception de Python selon laquelle « tout est un objet♂ » et « tout est aussi simple que possible ».
Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!