Maison > développement back-end > Tutoriel Python > Python a-t-il un type char ?

Python a-t-il un type char ?

步履不停
Libérer: 2019-07-29 09:18:45
original
13477 Les gens l'ont consulté

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
Copier après la connexion



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 &#39;ob_size+1&#39; 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&#39;s
* &#39;interned&#39; dictionary; in this case the two references
* from &#39;interned&#39; to this object are *not counted* in ob_refcnt.
*/
} PyStringObject;
Copier après la connexion

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&#39;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;
Copier après la connexion


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;
Copier après la connexion


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

Recommandations de didacticiels associées :

Tutoriel vidéo Python

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal