声明一个空列表

3 投票
3 回答
8708 浏览
提问于 2025-04-16 22:50

我刚注意到,用下面这种方式声明两个空列表:

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)

撰写回答