Get size of integer in Python

后端 未结 6 936
Happy的楠姐
Happy的楠姐 2020-12-10 11:54

How can I find out the number of Bytes a certain number takes up to store e.g. for \\x00 - \\xFF I\'m looking to get 1 (Byte), \\x100 - \\xffff would give me 2 (Bytes) and s

6条回答
  •  自闭症患者
    2020-12-10 12:42

    Unless you're dealing with an array.array or a numpy.array - the size always has object overhead. And since Python deals with BigInts naturally, it's really, really hard to tell...

    >>> i = 5
    >>> import sys
    >>> sys.getsizeof(i)
    24
    

    So on a 64bit platform it requires 24 bytes to store what could be stored in 3 bits.

    However, if you did,

    >>> s = '\x05'
    >>> sys.getsizeof(s)
    38
    

    So no, not really - you've got the memory-overhead of the definition of the object rather than raw storage...

    If you then take:

    >>> a = array.array('i', [3])
    >>> a
    array('i', [3])
    >>> sys.getsizeof(a)
    60L
    >>> a = array.array('i', [3, 4, 5])
    >>> sys.getsizeof(a)
    68L
    

    Then you get what would be called normal byte boundaries, etc.. etc... etc...

    If you just want what "purely" should be stored - minus object overhead, then from 2.(6|7) you can use some_int.bit_length() (otherwise just bitshift it as other answers have shown) and then work from there

提交回复
热议问题