这段 Python 代码是什么结果?

2017-04-26 21:26:00 +08:00
 jmc891205
l = (1, 2, [3, 4])
l[2] += [5, 6]

A. l 变为(1, 2, [3, 4, 5, 6])
B. 抛出 TypeError 异常: "'tuple' object does not support item assignment."
C. A 和 B 都是
D. A 和 B 都不是

4388 次点击
所在节点    Python
24 条回复
dacapoday
2017-04-26 21:31:48 +08:00
B
kindjeff
2017-04-26 21:40:26 +08:00
我试了, AB 都是。
weyou
2017-04-26 21:42:50 +08:00
C
beimingyouyu
2017-04-26 21:44:38 +08:00
C
gulu
2017-04-26 21:46:46 +08:00
b = l[2]
b += [7,8]
bukip
2017-04-26 21:51:08 +08:00
AB
LokiSharp
2017-04-26 21:54:22 +08:00
>>> l = (1, 2, [3, 4])
>>> l[2] += [5, 6]
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> l
(1, 2, [3, 4, 5, 6])
Yvette
2017-04-26 21:58:52 +08:00
cxyfreedom
2017-04-26 22:00:21 +08:00
C
director
2017-04-26 22:05:46 +08:00
WangYanjie
2017-04-26 22:14:34 +08:00
A, B 都是
l[2].append('MeiTiaoZhan')
mingyun
2017-04-26 23:32:42 +08:00
@director nice
sunbeams001
2017-04-27 00:00:51 +08:00
的确,这样就不报错了
b = l[2]
b += [5, 6]
soratadori
2017-04-27 02:23:38 +08:00
l = (1, 2, [3, 4])
try:
l[2] += [5, 6]
except:
print(l)
有点神奇
NoAnyLove
2017-04-27 03:34:10 +08:00
《 Fluent Python 》有详细解释这个问题
mapleray
2017-04-27 09:35:31 +08:00
mec
2017-04-27 10:08:29 +08:00
元组不可变,哪怕这种赋值都不行 l[2] = l[2]。
jmc891205
2017-04-27 10:51:16 +08:00
@NoAnyLove 嘿嘿 就是在看这本书 为了它还买了 Safari Books Online 的订阅 钱包好疼 T_T
yanzixuan
2017-04-27 11:49:24 +08:00
@sunbeams001 你可以 L[2].extend([5,6])
AkiseAru
2017-04-27 16:18:13 +08:00
C 结果[5,6]也被赋值进去了???

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/357570

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX