Heim  >  Artikel  >  Backend-Entwicklung  >  Hat Python einen char-Typ?

Hat Python einen char-Typ?

步履不停
步履不停Original
2019-07-02 09:31:2013375Durchsuche

Hat Python einen char-Typ?

Python hat keinen char-Typ und ein Zeichen ist auch eine Zeichenfolge.

Warum gibt es in Python keinen dedizierten char-Datentyp

Einfach ist besser als komplex? In Python beträgt der von jedem Zeichen in der Zeichenfolge belegte Platz 8 Bit.

>>> import sys
>>> sys.getsizeof('')
37
>>> sys.getsizeof('a')
38



Wie Sie sehen können, belegt das Nullzeichen 37 Byte und die Länge Der String „a“ mit dem Wert 1 belegt 38 Bytes Speicher. Mit einem weiteren Zeichen a gibt es ein weiteres Byte.

In Python werden Strings so implementiert

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;

Jedes Zeichen wird in ob_sval gespeichert und hat eine Größe von 8 Bit. Die restlichen 36 Bytes stammen hauptsächlich aus dem Makro PyObject_VAR_HEAD. Tatsächlich verwendet die String-Implementierung von Python auch eine globale Variable namens *interned, die die Länge speichern kann . Eine Zeichenfolge von 0 oder 1, also char, kann Platz sparen und beschleunigen.

/* 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;



Tatsächlich gibt es weder Zeiger noch „Nacktheit“. In der „Datenstruktur“ von Python (kein Objekt) wird selbst die einfachste ganzzahlige Ganzzahl auf diese Weise implementiert

typedef struct {
PyObject_HEAD
long ob_ival;
} PyIntObject;



Kurz gesagt, dieses Design erfüllt Pythons „Alles“. „Es ist ein Objekt“ und die Designphilosophie lautet: „Alles sollte so einfach wie möglich sein“.

Verwandte Tutorial-Empfehlungen: Python-Video-Tutorial

Das obige ist der detaillierte Inhalt vonHat Python einen char-Typ?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn