PYTHON是UNFAIR.它的治疗清单和具有偏倚的非清单变量

sur*_*rya -6 python

使用以下示例代码:

mat = []
x = 5
def add(c,b):
        print c+b
        x = 8
        mat.append(c)
        mat.append(b)
add(5,6)
add(8,9)
print mat
print x
Run Code Online (Sandbox Code Playgroud)

mat是附加但为什么不是x改变?为什么python以不同的方式处理列表和变量?

kin*_*all 10

不要将Python中的变量视为存储数据的命名框.把它们想象成你坚持物品的名牌.

在您的函数中,您将名称粘贴x在对象上8.这是一个本地名称,因此当函数结束时它会消失.在函数内部,本地名称x"shadows"(阻止访问)全局名称,x因此全局名称x不受赋值的影响.它仍然指向对象5,当您在函数外部打印它时,这就是您得到的.

您没有更改名称mat在函数内引用的对象.而是改变(变异)指向的对象.方法调用,即使是更改对象的方法,也与赋值不同.没有mat创建本地名称,因此您正在改变在函数外部创建的同一对象.

对于初学Python程序员来说,这是一个常见的陷阱,但它很容易理解,一旦理解,就不会对语言编程造成任何重大困难.

你不理解某事的事实并不能使它成为"不公平".Python已经存在了二十多年.它由非常聪明的人设计,可能被全世界成千上万的程序员使用.如果Python在这个级别的基础上有问题,那么它现在已经修复了.