我有一个如下代码,当我打印list1和list2时它显示相同的元素,但我在将现有list1分配给list2之后添加了9,所以它不应该在list2中显示9。
list1=[1,2,3,4]
list2=list1
list1.insert(4,9)
print(list1)
print(list2)
请清除我的怀疑。
答案 0 :(得分:3)
在python中,变量名是底层变量的引用。 list1
和list2
都引用相同的列表,因此当您将9
插入该列表时,您会看到两者中的更改。如果您希望它们不同,则需要制作显式副本(使用the copy
module,切片表示法list2 = list1[:]
或其他方法)。
答案 1 :(得分:1)
你们之间感到困惑,
当我们有不同的列表?和创建别名时。
正如你所写:
list1=[1,2,3,4]
list2=list1
上面的代码段会将list1
映射到list2
。
要检查两个变量是否引用同一个对象,可以使用is
运算符。
>>> list1 is list2
# will return "True"
在您的示例中,Python创建了一个列表,由list1
& list2
。所以对同一个对象有两个引用。我们可以说对象[1,2,3,4]
是别名的,因为它有多个名称,因为列表是可变的。因此,使用list1
所做的更改会影响list2
。
但是,如果你想拥有不同的列表,你应该这样做:
>>> list1 = [1, 2, 3, 4]
>>> list2 = list1[:] # here list2 is created as a copy of list1
>>> list1.insert(4, 9)
>>> print list1
[1, 2, 3, 4, 9]
>>> print list2
[1, 2, 3, 4]