python 中的变量名有些类似于C++中的指针的概念.
python 中的赋值操作改变的并不是内存中变量的值, 而是变量名指向的变量.
>>> var = 3
>>> tmp = var
>>> var
3
>>> tmp
3
>>> id(var)
10417272
>>> id(tmp)
10417272
>>> id(3)
10417272
>>> var = 4
>>> id(var)
10417260
>>> id(4)
10417260
>>> id(tmp)
10417272
>>> tmp
3
>>> var
4
>>>
上边的例子指出, 当执行 "var = 3" 时, python会在内存中分配一块空间, 把"3"赋值给这块空间.
然后, 将变量名 "var" 关联到分配的内存.
当执行 "var = 4" 时, python 会再分配一块内存并存入"4", 然后将变量名 "var" 关联到"4" 所在内存.
此时"3"所在的内存并没有变化.
对应的操作是:
>>> var = 3
分配内存编号10417272, 存入"3"
将"var" 关联到 10417272
>>> var = 4
分配内存编号10417260, 存入"4"
将"var" 关联到 10417260
>>> tmp3
>>> id(tmp)
10417272
此时10417272中的内容没有破坏, 仍然是"3", 并且"tmp"仍然指向10417272
事实上,当没有任何变量名指向一个内存中的变量市, python将释放该内存变量