将未分配给变量的列表添加到指向另一个列表的另一个变量是否会创建新的列表对象?

时间:2019-02-21 03:35:43

标签: python list memory mutable id

这是我的意思:

x = [1, 2, 3]
y = x
y = y + [4]

据我了解,变量y指向变量x,该变量存储列表对象[1、2、3]。在第二行代码中,xy都存储相同的ID。在代码的最后一行,我们将更改变量y存储的内容。是否将列表[4]添加到y中以创建一个包含4整数对象的新列表对象?我很确定xy仍然指向相同的ID,因为列表是可变的,我只需要在[4]上进行确认即可。是否创建了新的列表和int对象?

2 个答案:

答案 0 :(得分:0)

表达式y + [4]创建一个新列表,该列表是将[4]添加到y所包含的内容中的结果。将表达式的结果分配给y会更改y指向已创建的新列表。

这与以下代码没有什么不同

y = 1
y = y + 1

此代码后,y将为2,并且1的含义没有改变。

答案 1 :(得分:0)

没关系,我明白了!我错了,在第三行为y创建了一个新对象!它是列表[1,2,3,4]。变量x仍引用list [1、2、3]。添加[4]类似于python中的.extend()函数,其中将为4创建一个新的int对象,但没有一个包含该int的新列表对象!