问题
I have a code like below,when i print the list1 and list2 it shows same elements but i have added the 9 after the assignment of existing list1 to list2 so it should not show 9 in list2.
list1=[1,2,3,4]
list2=list1
list1.insert(4,9)
print(list1)
print(list2)
please clear my doubt.
回答1:
In python, a variable name is a reference to the underlying variable. Both list1
and list2
refer to the same list, so when you insert 9
into that list, you see the change in both. You need to make an explicit copy (using the copy module, slice notation list2 = list1[:]
, or some other method) if you want them to be distinct.
回答2:
You are confused between,
when we have different lists? and when an alias is created?.
As you have written:
list1=[1,2,3,4]
list2=list1
The above code snippet will map list1
to list2
.
To check whether two variables refer to the same object, you can use is
operator.
>>> list1 is list2
# will return "True"
In your example, Python created one list, reference by list1
& list2
. So there are two references to the same object. We can say that object [1,2,3,4]
is aliased as it has more than one name, and since lists are mutable. So changes made using list1
will affect list2
.
However, if you want to have different lists, you should do this:
>>> 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]
来源:https://stackoverflow.com/questions/47986224/list-assignment-in-python