- 列表是可变的
列表的主要部分是列表是可变的。这意味着可以更改列表的值。这就是您遇到麻烦的原因之一。请参阅文档以获取更多信息
- 评估顺序
另一部分是,在拆开元组的包装时,评估从左到右开始。请参阅文档以获取更多信息
介绍
当您执行和
a,b = c,d的值时
c,
d将首先存储它们。然后从左侧开始,将的值
a首先更改为
c,然后将的值
b更改为
d。
这里的要点是,如果
b更改的值时的位置有任何副作用
a,则将
d其分配给 后者
b,这
b受的副作用影响
a。
用例
现在来解决你的问题
在第一种情况下,
nums = [1, 2, 0] nums[nums[0]], nums[0] = nums[0], nums[nums[0]]
nums[0]最初是
1和
nums[nums[0]]是
2因为它的计算结果
nums[1]。因此,现在将1,2存储到内存中。
现在,元组拆包是从左侧开始的,所以
nums[nums[0]] = nums[1] = 1 # NO side Effect. nums[0] = 2
因此
print nums将打印
[2, 1, 0]
但是在这种情况下
nums = [1, 2, 0] nums[0], nums[nums[0]] = nums[nums[0]], nums[0]
nums[nums[0]], nums[0]与第一种情况一样,将2,1放在堆栈上。
但是,在左侧,即
nums[0], nums[nums[0]]的更改
nums[0]有副作用,因为它用作中的索引
nums[nums[0]]。从而
nums[0] = 2nums[nums[0]] = nums[2] = 1 # NOTE THAT nums[0] HAS CHANGED
nums[1]价值保持不变
2。因此
print nums将打印
[2, 2, 1]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)