Python删除最后一个索引,而不影响其他列表

时间:2020-04-16 17:49:36

标签: python list python-2.7

我有一个程序,其中有2个列表。我想删除其中一个列表的最后一个索引,但是遇到了我尝试删除每个列表内容的问题。

示例:

list1 = ["Index", "2nd Index"]
list2 = list1
print(list1 == list2) #Here it is true, as it should be.

del list1[-1]
print(list1 == list2) #Here is still true, which it shouldn't be.

我尝试使用del.pop()和切片。我唯一的解决方案是执行.txt文件,然后将第一个列表复制粘贴到其中,然后将所有内容复制粘贴到第二个列表中。 但是肯定还有另一种更简单的方法,它不需要我做一个文本文件,就可以为复制粘贴编写一个完整的代码部分。

2 个答案:

答案 0 :(得分:0)

您没有两个列表,只有一个列表包含两个名称。每当您对extern "C" { void print_test(int a); } 做某事时,您都对list2做某事,因为它们是相同的列表。

尝试将list1设为list2

copy

答案 1 :(得分:0)

简短答案:

执行list2 = list1代替list2 = list1[:]


tl; dr

在python中,变量名称只是一些指向实际持有该变量值的对象的指针(不是C的指针)。因此,当您执行variable_1 = variable_2时,会有两个变量指向同一变量。您可以从下面的示例中看到这种行为

a = 5
b = a
print(id(a), id(b)) #same identity
print(a is b) #True

如果稍后执行b = 10,它将为b创建一个新对象,并且id(a)id(b)将不再相等。列表也一样。

l1 = [1,2,3]
l2 = l1
id(l1), id(l2) #same identity
l1 is l2 #True
l2 = [2,3,4] #assign a new list
id(l1), id(l2) #different identities
l1 is l2 #False

但是当您仅更改/删除...等时。列表的特定索引,同一列表将被更新。您没有更改变量list2

l2 = l1
l2.pop()
id(l1), id(l2) #same identity
l1 is l2 #True

因此,您需要复制第一个列表。 list2 = list1[:]做到了