Maison >développement back-end >Tutoriel Python >Python a-t-il un type char ?
Python n'a pas de type char, et un caractère est aussi une chaîne.
Pourquoi n'y a-t-il pas de type de données char dédié en Python
Le simple vaut mieux que le complexe ? En Python, l'espace occupé par chaque caractère dans la chaîne est de 8 bits.
>>> import sys >>> sys.getsizeof('') 37 >>> sys.getsizeof('a') 38
Comme vous pouvez le constater, le caractère nul occupe 37 octets, et la longueur La chaîne 'a' avec une valeur de 1 occupe 38 octets de mémoire. Avec un caractère a de plus, il y a un octet de plus.
Dans Python, les chaînes sont implémentées 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 une taille de 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 la longueur. .Une chaîne de 0 ou 1, c'est-à-dire char, peut économiser de l'espace et accélérer.
/* This dictionary holds all interned strings. Note that references to strings in this dictionary are *not* counted in the string's ob_refcnt. When the interned string reaches a refcnt of 0 the string deallocation function will delete the reference from this dictionary. Another way to look at this is that to say that the actual reference count of a string is: s->ob_refcnt + (s->ob_sstate?2:0) */ static PyObject *interned;
En fait, il n'y a ni pointeurs ni "nudité". dans la "structure de données" python (non-objet), même l'entier le plus simple est implémenté de cette manière
typedef struct { PyObject_HEAD long ob_ival; } PyIntObject;
En bref, cette conception satisfait le "tout" de Python " "C'est un objet" et la philosophie du design est "tout doit être aussi simple que possible".
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!