python 中的strings, tuples, 以及numbers都是不可变类型,而list以及dict都是可变类型
示例module1.py 以及module2.py 从两个方面验证了上述结论。
首先,所谓不可变类型以及可变类型其实可以理解为值类型引用与引用类型引用。即传递参数的时候,是传递值还是传递引用。函数的作用域就相当于一个闭包,在此作用域内的修改才有效,因此,当函数传参的时候,可变类型传递的都是引用地址,而不可变类型传递的都是值。可变类型的修改就是影响全局,而不可变类型的修改只会影响此函数内的作用域。
module1.py
def func(a): a = 3 print("a的原始值{0} 以及a的地址{1}".format(a, id(a))) if __name__ == "__main__": a = 1 print("a的原始值{0} 以及a的地址{1}".format(a, id(a))) func(a) # a = 2 print("a的原始值{0} 以及a的地址{1}".format(a, id(a)))
module2.py
def func(a): a.append(1) print("a的原始值{0} 以及a的地址{1}".format(a[0], id(a))) if __name__ == "__main__": a = [] func(a) a.append(2) print("a的原始值{0} 以及a的地址{1}".format(a[1], id(a)))
建议你自己运行看看