【发布时间】:2015-10-14 22:58:16
【问题描述】:
所以 Python 是通过引用传递的。总是。但是像整数、字符串和元组这样的对象,即使被传递到函数中,也不能改变(因此它们被称为不可变的)。这是一个例子。
def foo(i, l):
i = 5 # this creates a new variable which is also called i
l = [1, 2] # this changes the existing variable called l
i = 10
l = [1, 2, 3]
print(i)
# i = 10
print(l)
# l = [1, 2, 3]
foo(i, l)
print(i)
# i = 10 # variable i defined outside of function foo didn't change
print(l)
# l = [1, 2] # l is defined outside of function foo did change
所以你可以看到整数对象是不可变的,而列表对象是可变的。
在 Python 中甚至有不可变对象的原因是什么?如果所有对象都是可变的,那么像 Python 这样的语言会有哪些优点和缺点?
【问题讨论】:
-
不可变对象更快。
-
1这个号码你能改变什么? -
@TigerhawkT3 我知道这是真的,但是即使一些常用的对象很慢,语言当然也有范式优势。
-
您将不变性与范围界定混淆了。
foo中的i变量与全局i变量不同。您可以在foo中的i = 5上方添加global i,但使用全局变量是不好的做法,因为它会使代码更难推理。 -
@bourbaki4481472 - 也许您应该实际测试过您发布的代码。
标签: python immutability