Python永恒的元组 - 我做错了什么?

时间:2016-03-01 19:13:41

标签: tuples mutable

道歉,如果这是显而易见的,但我对Python很新,我无法理解这个问题。在下面的代码中,我使用一系列列表填充了一个元组,我正在尝试使用此元组中的项创建一个新列表。我希望最终的结果是test_raw保持不变,test_working将如下所示:

[['aa', 1, 2, 99.5, ['bb', 1, 2, 27.2]],
 ['aa', 5, 5, 74.2, ['bb', 5, 5, 37]]]

然而,在这个过程中,我似乎也将'bb'列表附加到我的元组中。我认为一旦构建了一个元组,就无法改变,但显然不是。知道发生了什么吗?

test_raw = (['aa',1,2,99.5],
            ['bb',1,2,27.2],
            ['aa',5,5,74.2],
            ['bb',5,5,37])
test_working = []

for i in range(len(test_raw)):
   if test_raw[i][0] == "aa":
       test_working.append(test_raw[i])
for i in range(len(test_raw)):
   if test_raw[i][0] == "bb":
       for j in range(len(test_working)):
           if test_working[j][1:3] == test_raw[i][1:3]:
               test_working[j].append(test_raw[i])
               break
print(test_raw)
(['aa', 1, 2, 99.5, ['bb', 1, 2, 27.2]], ['bb', 1, 2, 27.2], ['aa',.....)

1 个答案:

答案 0 :(得分:0)

你不是追加元组本身,而是追逐元组内的列表。我不会为您调试代码,但是当您运行代码时,您会注意到您的第一个列表(原['aa',1,2,99.5])中有一个新元素(['bb', 1, 2, 27.2])< / p>

你没有附加到元组,你只是改变那个元组内的列表

考虑这个简单的例子

my_tuple = (1,2,3, [4,5,6])
my_tuple[3].append(7)

这不会添加到my_tuple,只是作为其最后一个元素的列表