How can I copy a Python string?

后端 未结 5 971
深忆病人
深忆病人 2020-12-12 23:38

I do this:

a = \'hello\'

And now I just want an independent copy of a:

import copy

b = str(a)
c = a[:]
d = a          


        
5条回答
  •  死守一世寂寞
    2020-12-12 23:43

    You don't need to copy a Python string. They are immutable, and the copy module always returns the original in such cases, as do str(), the whole string slice, and concatenating with an empty string.

    Moreover, your 'hello' string is interned (certain strings are). Python deliberately tries to keep just the one copy, as that makes dictionary lookups faster.

    One way you could work around this is to actually create a new string, then slice that string back to the original content:

    >>> a = 'hello'
    >>> b = (a + '.')[:-1]
    >>> id(a), id(b)
    (4435312528, 4435312432)
    

    But all you are doing now is waste memory. It is not as if you can mutate these string objects in any way, after all.

    If all you wanted to know is how much memory a Python object requires, use sys.getsizeof(); it gives you the memory footprint of any Python object.

    For containers this does not include the contents; you'd have to recurse into each container to calculate a total memory size:

    >>> import sys
    >>> a = 'hello'
    >>> sys.getsizeof(a)
    42
    >>> b = {'foo': 'bar'}
    >>> sys.getsizeof(b)
    280
    >>> sys.getsizeof(b) + sum(sys.getsizeof(k) + sys.getsizeof(v) for k, v in b.items())
    360
    

    You can then choose to use id() tracking to take an actual memory footprint or to estimate a maximum footprint if objects were not cached and reused.

提交回复
热议问题