声明一个空列表
我刚注意到,用下面这种方式声明两个空列表:
list1 = list2 = []
和用下面这种方式声明:
list1 = []
list2 = []
得到的结果完全不同。我觉得这个问题和整个程序没有太大关系,也不觉得结果有什么重要性。不过,这里有整个程序。那么,这两种声明方式之间有什么区别吗?
3 个回答
4
当你说:
list1 = list2 = []
其实只有一个空列表,你把名字list1和list2都指向了它。
当你说:
list1 = []
list2 = []
其实有两个空列表,每个名字指向一个不同的列表。
记住:在Python中,赋值操作从来不会复制数据。所以两个名字可以指向同一个可变的值(列表),这样它们都会看到对这个列表所做的任何更改。
6
list1 = list2 = []
可以写成:
list2 = []
list1 = list2
你所做的就是在创建一个别名(实际上是这样)。
10
list1 = list2 = []
这段话的意思是,把一个空列表([]
)同时赋值给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)