栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

先决条件 -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]



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633801.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号