captaindai 发表于 2024-4-9 10:13:35

为什么列表p要单独用copy函数才能复制出一个新的列表,而数值直接赋值就可以

如下一段演示,直接用赋值使q=p列表,更改q,p也会一起更改,当时用赋值使p=i数字,p做加减并不会影响i的数值,为什么
p =
q = p
q

q.pop()
5
q

p

i = 5
p = i
p = p - 1
p
4
i
5

FishC 发表于 2024-4-9 10:13:53

这是因为列表和数字在Python中是不同类型的对象。

当你将一个列表赋值给一个变量时,实际上该变量保存的是对列表对象的引用(或者说指针),而不是实际的列表数据。所以当你使用变量操作列表时,实际上是通过引用找到了原始列表,所以原始列表也会受到影响。

而对于数值,赋值操作实际上是将数值的值复制给了变量,而不是引用。所以当你改变变量的值时,原始数值并不会受到影响。

如果你想复制一个列表并创建一个新的、独立的列表对象,可以使用`copy`函数来复制。这样,即使你对复制后的列表进行操作,原始列表也不会受到影响。

下面是使用`copy`函数复制列表的示例代码:

p =
q = p.copy()

q.pop()
print(q)# 输出:
print(p)# 输出:

希望能够解答你的疑问!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-4-9 12:29:19

本帖最后由 jackz007 于 2024-4-9 12:38 编辑

p =       # p 成为可变对象
q = p                  # 将对象 p 映射为 q,p、q 是同一个对象个体。
q = 5                  # q 与 p 脱离映射关系,成为另一个对象
q = p . copy()         # 将对象 p 复制为 q,p、q 是两个对象个体
                           

Stubborn 发表于 2024-4-9 17:57:11

本帖最后由 Stubborn 于 2024-4-9 18:06 编辑

你有一个误区在这里了

直接用赋值使q=p列表,更改q,p也会一起更改
p =
q = p
q

q.pop()
5
q

p


当时用赋值使p=i数字,p做加减并不会影响i的数值
i = 5
p = i
p = p - 1
p
4
i
5


p = p - 1 这里是对P的重新赋值,肯定不会影响到I值,能理解吗

为什么列表p要单独用copy函数才能复制出一个新的列表,而数值直接赋值就可以

关于这个问题,不一定需要用copy,相对数字直接赋值,,列表直接赋值格式应该是对应这样的。copy,是复制一块内存,到另外一块内存。应该这样理解

p =
q =

页: [1]
查看完整版本: 为什么列表p要单独用copy函数才能复制出一个新的列表,而数值直接赋值就可以