Python范围可变与不可变的范围

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不改变.

Rei*_*ica 4

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,请记住,这在功能上与原始元素相同。