我知道python中的“变量赋值”实际上是一个名称(变量)与对象的绑定/重新绑定.
这带来了一个问题:是否可以在python中进行适当的赋值,例如使对象等于另一个对象?
我猜在python中没有必要:
>无法将“可分配对象”“分配给”,因为它们无法更改
>可以分配可变对象,因为它们可以更改,这可能很有用,因为您可能希望与原始对象分开处理字典副本.但是,在这些情况下,python哲学是在可变对象上提供克隆方法,因此您可以绑定副本而不是原始副本.
所以我猜答案是python中没有赋值,模仿它的最好方法是绑定到克隆对象
我只想分享这个问题,以防我在这里遗漏一些重要的事情
谢谢
编辑:
Lie Ryan和Sven Marnach的答案都很好,我想整体答案是两者兼而有之:
对于用户定义的类型,请使用成语:
a.dict = dict(b.dict)
(我想如果指定的类重新定义了属性访问方法,这也有问题,但不要挑剔:))
对于可变内置命令(列表和dicts),使用它们提供的克隆/复制方法(例如切片,更新)
最后无法更改的内置函数无法更改,因此无法分配
我会选择Lie Ryan,因为这是一个我没想过的优雅成语.
谢谢!
解决方法:
This brings the question: is it
possible to have proper assignment in
python, eg make an object equal to
another object?
是的你可以:
a.__dict__ = dict(b.__dict__)
将在C/C++中执行默认赋值语义(即执行浅层赋值).
这种广义分配的问题在于它永远不适合所有人.在C中,您可以覆盖赋值运算符,因为您总是需要选择是否需要完全浅层赋值,完全深度赋值或完全深度复制和完全浅复制之间的任何阴影.
标签:python
来源: https://codeday.me/bug/20190726/1544876.html