Is there some function which will tell me how many bytes does a string occupy in memory?
I need to set a size of a socket buffer in order to transfer the whole string at once.
Is there some function which will tell me how many bytes does a string occupy in memory?
I need to set a size of a socket buffer in order to transfer the whole string at once.
If it's a Python 2.x str, get its len. If it's a Python 3.x str (or a Python 2.x unicode), first encode to bytes (or a str, respectively) using your preferred encoding ('utf-8' is a good choice) and then get the len of the encoded bytes/str object.
For example, ASCII characters use 1 byte each:
>>> len("hello".encode("utf8"))
5
whereas Chinese ones use 3 bytes each:
>>> len("你好".encode("utf8"))
6
sys.getsizeof() doesn't give you what you want. So, if you have a utf-8 encoded string, in stead of saying len(myString), just say len(myString.encode("utf8"))import sys
sys.getsizeof(s)
# getsizeof(object, default) -> int
# Return the size of object in bytes.
But actually you need to know its represented length, so something like len(s) should be enough.
sys.getsizeof() is utterly irrelevant to the OP's problem: a size of 25 or 41 is a nonsense; malloc() and friends usually allocate chunks of memory whose size is a multiple of 2 ** n where n is certainly greater than 1, and some of the chunk is occupied by malloc overhead and sys.getsizeof() doesn't allow for any of this (because it doesn't know any details of the malloc implementation).len(s) won't be enough with Unicode, since many characters take up more than one byte. See tzot's answer (convert to bytes first when using Unicode).