嗨:这是对这个问题的跟进:
问题是deepcopy()
没有正确复制对象,这可以通过这个工作代码看出:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
class MyApp(App):
def build(self):
global Myroot
self.root = FloatLayout()
Myroot = self.root
Starthere(None)
return
class VarStorage:
pass
VS=VarStorage()
from kivy.uix.button import Button
import copy
def Starthere(instance):
VS.MyButton=Button()
print str(VS.MyButton)
VSCopy=copy.deepcopy(VS)
print str(VSCopy.MyButton)
MyApp().run()
根据我对副本的理解,它应该打印两次相同的按钮,但结果是:
<kivy.uix.button.Button object at 0x046C2CE0>
<kivy.uix.button.Button object at 0x04745500>
如何deepcopy()
复制相同的对象而不是新的(不存在的)对象?谢谢!
- - - - - - - - - - - 编辑 - - - - - - - - - - - - - - --
在尝试copy()
而不是之后deepcopy()
,这不是我打算做的:
我得到了什么deepcopy()
:
- VS 的复制类,为非对象复制项目(例如,如果 VS.text="text",则 VSCopy.text 将具有相同的内容而不会被链接)。
- 但是,对于对象,我需要的是对此类对象的引用的副本,但我没有得到,因为我得到了一个新的引用点和一个新的对象。
我得到了什么copy()
:
- 复制的类 VSCopy 与指向原始类 VS 的引用。我不想要这个,因为我想更改 VS 的内容(这就是我试图复制它的原因)并且仍然在 VSCopy 中提供原始内容。
复制模块中是否有这样的功能?