Python: copy of a variable

后端 未结 5 1243
[愿得一人]
[愿得一人] 2020-12-10 13:33

Is there a way in to make copy of a variable so that when the value changes of variable \'a\' it copies itself to variable \'b\'?

Example

a=\'hello\'         


        
相关标签:
5条回答
  • Depending on what you want to do, you might want to check the weakref module.

    This allows you to have a primary object and then several copies that will become None as soon as the primary object is gone.

    0 讨论(0)
  • 2020-12-10 13:46

    In short, with simple value assignments, you cannot do this. As you saw:

    a=4
    b=a
    a=5
    
    >>> print b
    4
    

    However, with mutable objects like lists, you can do this. As such:

    a=[1]
    b=a
    a.append(2)
    
    >>> print a
    [1,2]
    >>> print b
    [1,2]
    
    0 讨论(0)
  • 2020-12-10 13:55

    You're exploring how Python deals with references. Assignment is simply binding a reference to an object on the right hand side. So, this is somewhat trivial:

    a = 'foo'
    b = a
    print b is a  #True -- They *are the same object*
    

    However, as soon as you do:

    b = 'bar'
    b is a  #False -- they're not longer the same object because you assigned a new object to b
    

    Now this becomes really interesting with objects which are mutable:

    a = [1]
    b = a
    b[0] = 'foo'
    print a  #What?? 'a' changed?
    

    In this case, a changes because b and a are referencing the same object. When we make a change to b (which we can do since it is mutable), that same change is seen at a because they're the same object.

    So, to answer your question, you can't do it directly, but you can do it indirectly if you used a mutable type (like a list) to store the actual data that you're carrying around.


    This is something that is very important to understand when working with Python code, and it's not the way a lot of languages work, so it pays to really think about/research this until you truly understand it.

    0 讨论(0)
  • 2020-12-10 14:03

    There is an ugly way to create an independent copy of a simple variable via a temporary list:

    a = 6; 
    b = [a][0]
    
    0 讨论(0)
  • 2020-12-10 14:09

    You are asking if it is possible to create a reference to a variable and hold in another variable. No, this is not possible. See e.g. Create a reference to a variable (similar to PHP's "=&")?

    0 讨论(0)
提交回复
热议问题