360341024 发表于 2023-10-12 13:05:52

第23课时 第二个问题 请指教

x =
y = x
y =1
x == y

返回了True,这是为什么

y不是已经变成了吗

为什么还会是真

isdkz 发表于 2023-10-12 13:06:01

在Python中,变量是对象的引用。当你将一个列表赋值给另一个变量时,实际上是将指向该列表对象的引用复制到新变量中。因此,x和y引用同一个列表对象。

当你更改y中的元素时,实际上是在同一个列表对象中进行更改。因此,x和y仍然引用同一个列表对象,它们的值相等,因此返回True。

如果要创建一个新的列表对象,应该使用切片操作或copy()方法:

x =
y = x[:]
y = 1
print(x == y) # False


或者:

x =
y = x.copy()
y = 1
print(x == y) # False

Mike_python小 发表于 2023-10-12 13:06:26

回答:

这个问题是因为Python中的列表是可变对象,而变量只是对这个对象的引用。因此,当我们把一个列表赋值给另一个变量时,两个变量会指向同一个对象,在修改其中一个变量所指向的列表时,另一个变量所指向的列表也会被修改。这就是列表的可变性。

在这个例子中,我们先将列表赋值给变量x,然后将变量x赋值给变量y,此时变量y也指向了列表。接着,我们将变量y所指向的列表的第二个元素修改为1,此时列表变成了。由于变量x和变量y都指向这个列表,所以它们所指向的对象是相同的,因此x == y返回True。

如果我们想得到x和y指向不同的列表,可以使用以下方法:


x =
y = x.copy()
y = 1
print(x == y) # False


这里我们使用了列表的copy方法来复制列表,这样就得到了一个新的列表对象。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-10-12 13:06:32

在Python中,当你将一个列表(如x)赋值给另一个变量(如y)时,你实际上是在创建一个新的引用,而不是复制整个列表。这意味着,x和y都指向同一个列表,所以当你改变y中的元素时,x中的对应元素也会被改变。

在你的例子中,当你执行y = x时,y和x都指向同一个列表。然后,当你执行y = 1时,你改变了这个列表的第二个元素,所以这个列表变成了。因为x和y都指向这个列表,所以x和y现在都是。

因此,当你比较x == y时,结果是True,因为x和y实际上都指向同一个列表。

如果你想要创建x的一个副本,然后改变这个副本,你可以使用y = x.copy()。这样,当你改变y时,x不会被改变。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

allen-xy 发表于 2023-10-12 15:48:37

可以使用id(变量名),来查看变量的内存空间id,就知道这两个变量是否是同一个了。
页: [1]
查看完整版本: 第23课时 第二个问题 请指教