Python: Variable Name and Value

 27th March 2021 at 12:01am

Python 的变量名和值之间的关系,这份材料讲得很清楚:

重点是

  • Python 中 name 是有作用域的(scoped,比如函数、块等),value 是全局的(global,因为放在堆中)
    l = [1, 2, 3]
    # 在堆上会建立一个 [1, 2, 3] 的数组,带有引用计数 1
    # l 被放入全局变量的词典 `globals()` 中,
    # 它的作用域是全局的(程序运行期不会失效),它指向堆上该数组的地址
    
    def f():
        x = l
        # x 也指向堆上数组的地址,同时该数组的引用计数加 1
        # 函数退出后,x 的生命周期结束,该数组引用计数减 1
    
    if __name__ == '__main__':
        f()
  • 一个 name 只能指向一个 value,而多个 name 可以同时指向同个 value
  • Python 的变量传递没有「传引用还是传值」之分,无论赋值还是函数参数传递,传的都是引用只是引用的值,有 mutable 和 immutable 之分。Immutable 如数字、tuple 等,是无法被修改的

同时看看 Fluent Python 的 第八章