Ale*_*one 5 python mutable immutability scoping
首先,我要像其他人一样开始.我是python的新手.我的老师给了我这个问题:
def f(a, b, c):
a = 1
c = b
c[0] = 2
a = 10
b = [11, 12, 13]
c = [13, 14, 15]
f(a, b, c)
print a, b, c
Run Code Online (Sandbox Code Playgroud)
它打印:
10 [2, 12, 13] [13, 14, 15]
Run Code Online (Sandbox Code Playgroud)
我理解,因为整数是不可变的,所以保持在10,但我不明白为什么b改变而c不改变.
c = b
c[0] = 2
Run Code Online (Sandbox Code Playgroud)
由于您设置c为指向b,因此您可以轻松地执行此操作:
def f(a, b, unused): # notice c isn't in the parameter list
a = 1
c = b # c is declared here
c[0] = 2 # c points to b, so c[0] is b[0]
Run Code Online (Sandbox Code Playgroud)
现在很明显 总是c与 相同b,所以为什么不直接删除它:
def f(a, b, unused):
a = 1
b[0] = 2
Run Code Online (Sandbox Code Playgroud)
现在很明显,您正在更改 的第一个元素b,并且没有对 做任何操作c,请记住,这在功能上与原始元素相同。