首页 > 试题广场 >

执行以下程序,下列选项中,说法正确的是() tup = (1

[单选题]

执行以下程序,下列选项中,说法正确的是()

tup = (1,2,[3,4]) ①

tup[2]+=[5,6] ②

  • 执行代码②后,变量tup[2]的id发生改变

  • ①和②均可以执行而不会抛出异常

  • 执行代码②时会抛出异常,最终tup的值为(1,2,[3,4,5,6])

  • 执行代码②时会抛出异常,最终tup的值为(1,2,[3,4])
这个文章我来基于之前的23年进行了修改:
原文如下:

增加如下:其实这个结果涉及到了底层,更好的是进行一个端点的操作,因为涉及到了+=的知识(我也是小白,我是这么认为的):

如果是=+,那么tuple结果是如下:(其实只要抛出异常,这种代码就算上无效的了,不必要追求python细节的东西,甚至异常可以自己是可以定义的):

编辑于 2023-03-29 01:23:44 回复(7)

+=和.extend()在修改list时都不会修改地址。Python中两者的行为不同:Python中的.extend()就是在原始内存地址上对list进行了扩展,没有改变内存地址,也就不会报错

后者成功在原地址修改了列表,但是它会重新赋值,而这一步引发了报错,因为元组的元素不能修改

发表于 2022-02-24 16:14:48 回复(0)
既然2发生异常,那怎么会tup怎么会改变呢
发表于 2022-09-15 22:18:20 回复(0)
不能用+=但可以用extend
发表于 2021-12-13 13:59:51 回复(2)
发表于 2022-03-14 08:47:45 回复(1)
元组不可变指的是其中的元素地址不可变,虽然list+=扩容并不会改变其地址,但是元组不支持元素直接赋值
编辑于 2023-02-18 23:45:01 回复(0)
报错是因为元组中的元素值是不允许修改的,但我们可以对元组进行连接组合:tup[2] + [5,6] 
发表于 2022-03-08 22:05:13 回复(0)
元组不支持赋值操作,所以执行代码②时会抛出异常
编辑于 2022-02-18 18:44:58 回复(0)
元组不能挨个计算,
发表于 2021-12-12 22:30:20 回复(0)
太喜欢牛客了
发表于 2022-04-26 14:36:44 回复(0)
tup = (1,2,[3,4])
tup[2].extend([5,6])
print(tup) # (1, 2, [3, 4, 5, 6])

发表于 2021-12-21 22:31:07 回复(2)
+=是先加再赋值,即使赋值前后列表的地址不变,但元组不管你那些,就是不让动
发表于 2024-03-15 14:45:28 回复(0)
➕=有等于操作会报错,extend不会
发表于 2023-07-19 01:23:06 回复(0)
编辑于 2023-07-17 16:08:16 回复(1)
列表相加为合并为一个列表,那么tup[2]+[5,6]=[3,4,5,6],但是元组的值不能被改变因此不能直接赋值,所以会报错,但是可以变成tup.extend([5,6]),就不会报错
发表于 2023-07-12 21:48:23 回复(0)
tup[2]先执行加的操作是在原地执行的吗,我这里直接执行tup[2]+[4,5]地址发生改变,执行tup[2]+=tup[2]+[4,5]虽然报错,但是tup[2]地址不变,内容改变,这里不理解底层是怎么个流程?
发表于 2023-06-03 15:48:57 回复(0)
题目代码没有写完整啊


编辑于 2023-02-27 16:09:21 回复(0)
主要在+=,是先+后=,所以是先加入再赋值时才抛出异常。
发表于 2022-12-16 20:27:00 回复(0)
都报错了,为什么元组还是被修改了
发表于 2022-10-25 13:32:48 回复(0)
tup = (1, 2, [3, 4])
a = id(tup)
tup[2].extend([5, 6])
b = id(tup) print(tup) print(a == b) # true

(1, 2, [3, 4, 5, 6])
True
发表于 2022-09-18 10:03:56 回复(0)