将未分配给变量的列表添加到指向不同列表的另一个变量是否会创建一个新的列表对象?
Does adding a list unassigned to a variable to another variable pointing to a different list create a new list object?
我的意思是:
x = [1, 2, 3]
y = x
y = y + [4]
据我理解,变量y
指向变量x
,它存储的是列表对象[1,2,3]。在第二行代码中,x
和 y
存储了相同的 id。在最后一行代码中,我们正在更改变量 y
存储的内容。将列表 [4]
添加到 y 会创建一个包含 4 的 int 对象的新列表对象吗?我很确定 x
和 y
仍然指向相同的 id,因为列表是可变的,我只需要在 [4] 上确认。是否创建了新的列表和 int 对象?
表达式 y + [4]
创建一个新列表,该列表是将 [4]
添加到 y
包含的任何内容的结果。将该表达式的结果分配给 y
更改 y
以指向创建的新列表。
这与以下代码没有什么不同:
y = 1
y = y + 1
这段代码后,y
会变成2
,1
的意思没有变。
没关系,我明白了!我写错了,在第三行为 y
创建了一个新对象!它是列表 [1, 2, 3, 4]。变量 x 仍然引用 list
[1, 2, 3]。添加 [4] 类似于 python 中的 .extend() 函数,其中将为 4 创建一个新的 int 对象,但不会创建一个包含该 int 的新列表对象!
我的意思是:
x = [1, 2, 3]
y = x
y = y + [4]
据我理解,变量y
指向变量x
,它存储的是列表对象[1,2,3]。在第二行代码中,x
和 y
存储了相同的 id。在最后一行代码中,我们正在更改变量 y
存储的内容。将列表 [4]
添加到 y 会创建一个包含 4 的 int 对象的新列表对象吗?我很确定 x
和 y
仍然指向相同的 id,因为列表是可变的,我只需要在 [4] 上确认。是否创建了新的列表和 int 对象?
表达式 y + [4]
创建一个新列表,该列表是将 [4]
添加到 y
包含的任何内容的结果。将该表达式的结果分配给 y
更改 y
以指向创建的新列表。
这与以下代码没有什么不同:
y = 1
y = y + 1
这段代码后,y
会变成2
,1
的意思没有变。
没关系,我明白了!我写错了,在第三行为 y
创建了一个新对象!它是列表 [1, 2, 3, 4]。变量 x 仍然引用 list
[1, 2, 3]。添加 [4] 类似于 python 中的 .extend() 函数,其中将为 4 创建一个新的 int 对象,但不会创建一个包含该 int 的新列表对象!