#Python does not have a char type, and a character is also a string.
Why is there no special char data type in Python?
Simple is better than complex. In Python, the space occupied by each character in the string is 8 bits.
>>> import sys >>> sys.getsizeof('') 37 >>> sys.getsizeof('a') 38
As you can see, the null character occupies 37 bytes, and the length The string 'a' with a value of 1 occupies 38 bytes of memory. With one more character a, there is one more byte.
Inside Python, the string is implemented like this
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;
Each char is stored in ob_sval, accounting for 8 bits in size. The remaining 36 bytes mainly come from the macro PyObject_VAR_HEAD. In fact, python's string implementation also uses a global variable called *interned, which can store the length. A string of 0 or 1, that is, char, can save space and speed up.
/* 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;
In fact, there are neither pointers nor "nakedness" in Python "data structure" (non-object), even the simplest integer integer is implemented in this way
typedef struct { PyObject_HEAD long ob_ival; } PyIntObject;
In short, this design satisfies python's "everything "It is an object" and the design philosophy is "everything should be as simple as possible".
Recommended related tutorials: Python video tutorial
The above is the detailed content of Does Python have a char type?. For more information, please follow other related articles on the PHP Chinese website!