gpt4 book ai didi

python - python中的赋值

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:29 27 4
gpt4 key购买 nike

我知道 python 中的“变量赋值”实际上是将名称(变量)绑定(bind)/重新绑定(bind)到对象。

这带来了一个问题:是否可以在 python 中进行适当的赋值,例如使一个对象等于另一个对象?

我想在 python 中不需要这样做:

  1. 不可变对象(immutable对象)无法“分配给”,因为它们无法更改

  2. 可变对象可能会被分配给,因为它们可以改变,这可能很有用,因为您可能想要与原始字典分开操作字典的副本。然而,在这些情况下,python 哲学是在可变对象上提供克隆方法,因此您可以绑定(bind)副本而不是原始对象。

所以我猜答案是 python 中没有赋值,模仿它的最好方法是绑定(bind)到克隆对象

我只是想分享这个问题,以防我在这里遗漏了一些重要的东西

谢谢

编辑:

Lie Ryan 和 Sven Marnach 的答案都很好,我想总体答案是两者的混合:

对于用户定义的类型,使用习惯用法:

a.dict = dict(b.dict)

(我想如果分配的类重新定义了属性访问方法,这也会有问题,但不要大惊小怪:))

对于可变的内置函数(列表和字典),使用它们提供的克隆/复制方法(例如切片、更新)

最终不可变的内置函数无法更改,因此无法分配

我会选择 Lie Ryan,因为这是一个我没想到的优雅成语。

谢谢!

最佳答案

我认为您对 Python 中赋值的描述是正确的——我只是想在特殊情况下添加一种不同的克隆方法和赋值方式。

“复制构造”可变 内置 Python 对象将生成该对象的(浅)副本:

l = [2, 3]
m = list(l)
l is m
--> False

[编辑:正如 Paul McGuire 在评论中指出的那样,“复制构造函数”(请原谅我的 C++ 术语)对于一个不可变 构建的行为-在 Python 中,对象是依赖于实现的——你可能会得到一个副本或只是同一个对象。但是因为对象无论如何都是不可变的,所以你不应该关心。]

y = type(x)(x) 可以通用地调用复制构造函数,但这似乎有点神秘。当然,还有 copy允许浅拷贝和深拷贝的模块。

一些 Python 对象允许赋值。例如,您可以在不创建新对象的情况下分配给列表:

l = [2, 3]
m = l
l[:] = [3, 4, 5]
m
--> [3, 4, 5]

对于字典,您可以使用 clear() 方法,然后使用 update(otherdict) 来分配给字典,而无需创建新对象。对于一组 s,您可以使用

s.clear()
s |= otherset

关于python - python中的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4204075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com