我有一个程序,其中有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文件,然后将第一个列表复制粘贴到其中,然后将所有内容复制粘贴到第二个列表中。
但是肯定还有另一种更简单的方法,它不需要我做一个文本文件,就可以为复制粘贴编写一个完整的代码部分。
答案 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[:]
做到了