こんにちは: これはこの質問のフォローアップです:
すべてのpythonインスタンスを新しいクラスにコピーするには?
問題は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()
コピーの私の理解から、同じボタンを 2 回印刷する必要がありますが、結果は次のようになります。
<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()
:
- 元のクラス VS を指す参照を使用してクラス VSCopy をコピーしました。私はVSの内容を変更したいので(それが私がそれをコピーしようとしている理由です)、元の内容をVSCopyで利用できるようにしたいので、これは必要ありません。
コピーモジュールにそのような機能はありますか?