• 难度级别: 中等

1)以下程序的输出是什么?

L1 = []
L1.append([1, [2, 3], 4])
L1.extend([7, 8, 9])
print(L1[0][1][1] + L1[2])

a) 类型错误:只能将列表(不是“int”)连接到列表 

b) 12 

c) 11 

d) 38

答:(c)

解释: 在 print() 中,使用了索引。L1[0] 表示 [1, [2, 3], 4], L1[0][1] 表示 [2, 3], 
L1[0][1][1] = 3 和 L1[2] = 8 . 因此,两个整数相加,3 + 8 = 11,输出为 11。

2) 以下程序的输出是什么?

L1 = [1, 1.33, 'HY', 0, 'NO', None, 'G', True]
val1, val2 = 0, ''
for x in L1:
if(type(x) == int or type(x) == float):
val1 += x
else if(type(x) == str):
val2 += x
else:
break
print(val1, val2)

a) 2 HYNO 

b) 2.33 HYNOG 

c) 2.33 HYNONoneGTrue 

d) 2.33 HYNO

答: (d)  

解释: val1 将只有整数和浮点值 val1 = 1 + 1.33 + 0 = 2.33 和 val2 将有字符串
值 val2 ='GFG' + 'NO' = 'GFGNO'。字符串 'G' 不会是 val2 的一部分,因为 for 循环将在 None 处中断,
因此 'G' 不会添加到 val2。

3) 以下程序的输出是什么?

L1 = [1, 2, 3, 4]
L2 = L1
L3 = L1.copy()
L4 = L3
L1[0] = [5]
print(L1, L2, L3, L4)

a) [5, 2, 3, 4] [5, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4] 

b) [[5], 2, 3, 4 ] [[5], 2, 3, 4] [[5], 2, 3, 4] [1, 2, 3, 4] 

c) [5, 2, 3, 4] [5, 2, 3, 4] [5, 2, 3, 4] [1, 2, 3, 4] 

d) [[5], 2, 3, 4] [[5], 2, 3, 4] [1, 2, 3 , 4] [1, 2, 3, 4]

答: (d) 

解释: L2 是指向与 L1 相同对象的引用,
而 L3 和 L4 是 List L1 的单递归复制(浅拷贝)。
L1[0] = [5],意味着在索引 0 处,列表 [5] 将存在,而不是整数值 5。

4) 以下程序的输出是什么?

import sys
L1 = tuple()
print(sys.getsizeof(L1), end = " ")
L1 = (1, 2)
print(sys.getsizeof(L1), end = " ")
L1 = (1, 3, (4, 5))
print(sys.getsizeof(L1), end = " ")
L1 = (1, 2, 3, 4, 5, [3, 4], 'p', '8', 9.777, (1, 3))
print(sys.getsizeof(L1))

a) 0 2 3 10 

b) 32 34 35 42 

c) 48 64 72 128 

d) 48 144 192 480

答: (c) 
解释: Empty Tuple 有 48 字节作为开销大小,每个附加元素需要 8 字节。 
(1, 2) 尺寸:48 + 2 * 8 = 64 
(1, 3, (4, 5)) 尺寸:48 + 3 * 8 = 72 
(1, 2, 3, 4, 5, [3, 4] , 'p', '8', 9.777, (1, 3)) 尺寸:48 + 10 * 8 = 128

5) 以下程序的输出是什么?

T1 = (1)
T2 = (3, 4)
T1 += 5
print(T1)
print(T1 + T2)

a) TypeError 

b) (1, 5, 3, 4) 

c) 1 TypeError 

d) 6 TypeError

答: (d) 
解释: T1 是整数,T2 是元组。这样T1就会变成1 + 5 = 6。但是整数和元组不能相加,会抛出TypeError。

如果大家发现任何不正确的地方,可以在下方评论区告诉我,互相学习,共同进步!