我刚注意到将两个空列表声明为:
list1 = list2 = []
与以下相比,产生了完全不同的结果:
list1 = []
list2 = []
我不是这个问题与整个程序有关,或者结果很重要。不过这里是the whole program。两种宣言方式之间有什么区别吗?
答案 0 :(得分:9)
list1 = list2 = []
将同一个空列表实例([]
)分配给list1和list2。这是因为对象实例是通过引用分配的。
您可以这样做:
list1, list2 = [], []
为两个变量分配两个不同的列表。
您可以按如下方式查看:
list1 = list2 = []
print id(list1) # Same as id(list2)
print id(list2) # Same as id(list1)
list1, list2 = [], []
print id(list1) # Different than id(list2)
print id(list2) # Different than id(list1)
答案 1 :(得分:6)
list1 = list2 = []
可以写成:
list2 = []
list1 = list2
你所做的只是制作一个别名(有效)。
答案 2 :(得分:4)
当你说:
list1 = list2 = []
只有一个空列表,你将list1和list2都指向它。
当你说:
list1 = []
list2 = []
有两个空列表,每个名称都有不同的名称。
请记住:Python中的赋值永远不会复制数据。因此,两个名称可以指向相同的可变值(列表),并且它们都将看到对其进行的任何更改。