如果我有以下Python代码

>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]

是否保证x始终为[1,2,3],或者其他临时元素的排序可能吗?

是的,python列表中元素的顺序是持久的。

简而言之,是的,order得以保留。 长期:

通常,以下定义将始终适用于列表之类的对象:

列表是可以包含重复元素的元素的集合,并且具有通常不会更改的已定义顺序,除非明确指示这样做。 堆栈和队列都是列表类型,它们为添加和删除元素提供特定的(通常是有限的)行为(堆栈为LIFO,队列为FIFO)。 列表是事物列表的实际表示。 字符串可以被认为是字符列表,因为顺序很重要(+)并且字符串内容中的重复项当然是允许的(+可以存在且!= "a")。

集合是一组元素,它们不能包含重复项,并且具有可能会或可能不会随时间变化的非确定顺序。 集合不代表事物列表,而是描述某些事物的范围。 集合的内部结构,其元素如何相对于彼此存储,通常并不意味着传达有用的信息。 在一些实现中,集合总是在内部排序; 在其他情况下,排序只是未定义(通常取决于散列函数)。

集合是一个通用术语,指的是用于存储(通常是可变的)多个其他对象的任何对象。 列表和集合都是一种集合。 元组和数组通常不被视为集合。 有些语言也认为地图(描述不同对象之间关联的容器)也是一种集合。

这种命名方案适用于我所知道的所有编程语言,包括Python,C ++,Java,C#和Lisp(其中不保持订单的列表特别具有灾难性)。 如果有人知道任何情况并非如此,请说出来,我会编辑我的答案。 请注意,特定实现可能会使用这些对象的其他名称,例如C ++中的vector和ALGOL 68中的flex(两个列表; flex在技术上只是一个可调整大小的数组)。

如果由于+标志如何在这里工作的具体情况而在您的案例中留下任何混淆,只要知道顺序对于列表很重要,除非有充分的理由相信否则您几乎总是可以安全地假设列表操作保留 订购。 在这种情况下,+符号的行为与字符串(它实际上只是字符列表)非常相似:它采用列表的内容并将其置于另一个列表的内容之后。

如果我们有

list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]
然后
list1 + list2
是相同的
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
评估为
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]