元组拆包顺序更改分配的值

元组拆包顺序更改分配的值,第1张

元组拆包顺序更改分配的值 先决条件 -2个重点
  • 列表是可变的

列表的主要部分是列表是可变的。这意味着可以更改列表的值。这就是您遇到麻烦的原因之一。请参阅文档以获取更多信息

  • 评估顺序

另一部分是,在拆开元组的包装时,评估从左到右开始。请参阅文档以获取更多信息


介绍

当您执行和

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]



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5639670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存