Referencing global primitives vs. objects
有人能用python解释一下下面的结果吗?
当运行以下代码片段时,python抛出一个错误,表示变量
1 2 3 4 5 6 | x = 1 def increase_x(): x += 1 increase_x() |
当然,解决方案是将行
但是,在运行下一段代码时,不会出现错误,结果是您所期望的:
1 2 3 4 5 6 7 | x = [2, -1, 4] def increase_x_elements(): for k in range(len(x)): x[k] += 1 increase_x_elements() |
这是因为整数是python中的基元(而不是对象),所以第一个代码段中的
正如ffisegydd指出的,在python中没有类似于原语的东西:一切都是一个对象。
但是,您应该注意,在这两个片段中,您正在做两件完全不同的事情。首先,将
在第二个片段中,您是在修改x的内容,而不是重新绑定它。这是因为列表是可变的,但是区别不是可变的和不可变的,而是可变的和重新绑定的:重新绑定可变对象将失败,就像使用整数一样。