What happens when you assign the value of one variable to another variable in Python?

后端 未结 10 831
太阳男子
太阳男子 2020-11-30 00:54

This is my second day of learning python (I know the basics of C++ and some OOP.), and I have some slight confusion regarding variables in python.

Here is how I unde

10条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-30 01:24

    In Python, a variable holds the reference to the object. An object is a chunk of allocated memory that holds a value and a header. Object's header contains its type and a reference counter that denotes the amount of times this object is referenced in the source code so that Garbage Collection can identify whether an object can be collected.

    Now when you assign values to a variable, Python actually assigns references which are pointers to memory locations allocated to objects:

    # x holds a reference to the memory location allocated for  
    # the object(type=string, value="Hello World", refCounter=1)
    
    x = "Hello World" 
    

    Now when you assign objects of different type to the same variable, you actually change the reference so that it points to a different object (i.e. different memory location). By the time you assign a different reference (and thus object) to a variable, the Garbage Collector will immediately reclaim the space allocated to the previous object, assuming that it is not being referenced by any other variable in the source code:

    # x holds a reference to the memory location allocated for  
    # the object(type=string, value="Hello World", refCounter=1)
    
    x = "Hello World" 
    
    # Now x holds the reference to a different object(type=int, value=10, refCounter=1)
    # and object(type=string, value="Hello World", refCounter=0) -which is not refereced elsewhere
    # will now be garbage-collected.
    x = 10
    

    Coming to your example now,

    spam holds the reference to object(type=int, value=42, refCounter=1):

    >>> spam = 42
    

    Now cheese will also hold the reference to object(type=int, value=42, refCounter=2)

    >>> cheese = spam
    

    Now spam holds a reference to a different object(type=int, value=100, refCounter=1)

    >>> spam = 100
    >>> spam
    100
    

    But cheese will keep pointing to object(type=int, value=42, refCounter=1)

    >>> cheese
    42
    

提交回复
热议问题