問題タブ [deep-copy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - シンプルな Python オブジェクトをディープコピーする
__deepcopy__
メソッドを定義するオブジェクトがあります。指定されたメソッドではなく、クラスのオブジェクトがコピーされるデフォルトの方法でディープコピーする関数が欲しいですobject
。
どうすればそれができますか?私はそれをコーディングしようとすることができると思いますが、おそらく私が考えていない多くの「落とし穴」があるでしょう.
私がそうしているのは、__deepcopy__
メソッドを実装するオブジェクトクラスがあり、そのメソッドが何らかの条件をチェックし、場合によっては特定の方法でオブジェクトをディープコピーし、他の場合にはディープコピーするためです。デフォルトobject
の方法。
python - カスタムタイプに対してPythonのcopy.deepcopy()を呼び出す問題をデバッグするにはどうすればよいですか?
私のコードでは、を使用してクラスのインスタンスのコピーを取得しようとしていますcopy.deepcopy
。問題は、状況によっては次のエラーでエラーが発生することです。
多くの調査の結果、次のコードを使用してエラーを再現できることがわかりました。
問題は、ある時点でNotImplementedType
ビルトインをコピーしようとしていることのようです。問題は、なぜこれを行うのかということです。__deepcopy__
私はクラスでオーバーライドしていませんし、それが常に発生するわけではありません。このタイプのコピーを作成するリクエストがどこから来たのかを追跡するためのヒントはありますか?
copy
これが起こっていることを確認するために、モジュール自体にデバッグコードをいくつか入れましたが、問題が発生するポイントは再帰スタックのはるか下にあり、私が見ているものを大いに活用することは非常に困難です。
apache-flex - Flex: FileReference の DeepCopy
私のプロジェクトでは、ユーザーが FileReference クラスを使用して画像を選択できるようにしています。次に、load() 関数を使用して、これらの画像を .data プロパティに読み込みます。この後、いくつかのローカル操作を実行し、それらをサーバーに送信します。
私がやりたいことは、選択した FileReferences をもう一度反復処理し、それらを .data プロパティにロードし、別の操作を実行して、もう一度サーバーに送信できるようにすることです。ユーザーが呼び出したイベントからこれを行うことができるはずであることはわかっていますが、それはここでは問題ではありません。
問題は、FileReference が初めてロードされると、それをアンロードすることができず、メモリ内のすべての画像のデータを保持できないことです。これらは巨大であるためです。
したがって、私ができることは 1 つだけだと思います。それは、FileReference で DeepCopy を実行することです...次に、最初のバージョンをロードし、それを廃棄して、2 回目の「実行」にコピーを使用することができます。
ObjectUtil.copy を使用しようとしましたが、たとえばコピーの .name プロパティにアクセスすると、次のように失敗します。
flash.net::FileReference/get name() で
関連するスニペット:
FileReference クラスの一部の保護されたプロパティがコピーを防止するというのは本当ですか? もしそうなら、何とかこれを回避できますか?または、全体的な問題に対する他の解決策はありますか?
ヒントやアイデアをいただければ幸いです。
c# - ラムダ式を含むオブジェクトをディープコピーするにはどうすればよいですか?
ロックマンのゲームについては、また私です。オブジェクトをデータ駆動できるように、コンポーネントシステムに切り替えました。うまくいきますが、問題が発生しました。
私のオブジェクトには、入力ファイルで指定された状態があります。これらの状態には、他の状態に移行するためのトリガーがあります。状態変化の条件も入力ファイルにあり、ラムダ式に解析されます。次に、オブジェクトをディープコピーする必要があります。また、元のメンバーではなく、コピーのメンバーを参照するラムダが必要です。オリジナルはプログラムのロード時にファイルからロードされますが、その後いつでもコピーできます(発射物が発射されたと考えてください)。
大幅に簡略化されたコードを次に示します。
それだけではありません。トリガーによって実際に状態が変化し、新しい状態のイニシャライザーがそのアクションを呼び出しますが、ここでは簡略化しました。
したがって、問題は、このコンポーネントをディープコピーするとき、またはとにかくしようとすると、ラムダが元のコンポーネントではなく、コピーのDependentComponentのインスタンスを参照するようにする方法がわからないことです。エンティティのディープコピーが新しいDependentComponentを取得していることをすでに確認しましたが、ラムダは元のコンポーネントを参照しているだけです。デリゲートは、作成されると基本的に特定のインスタンスにロックされますか?新しいものを作成する必要がありますか?ファイルからエンティティ全体を再度ロードする必要はありません。
linq - Enumerable.Repeat()はディープコピーを実行しますか?
私が以下を使用する場合:
リストの2番目の要素は、最初の要素の深いコピーになりますか?
注: myCustomObjectは任意のオブジェクトにすることができます
編集:カスタムオブジェクトを処理するときにEnumerable.Repeatを使用する可能性についても教えてください。
ありがとう
c# - C# のバイナリ シリアル化で親オブジェクトを除外する
C# でのバイナリ シリアル化について質問があります
クラス B のオブジェクトを (もちろんグラフ内のすべてのサブオブジェクトと共に) ディープ クローンできるようにする必要があります。バイナリシリアル化を使用してこれを実装したいと思います。それが最善の方法であるかどうかの議論は、この質問の文脈では無関係です。
私はこのクラス構造を持っているとしましょう:
バイナリ シリアライゼーションを使用したディープ クローン作成用のヘルパー クラス (このメソッド コードはネット上のどこかから取得しました。TBH がどこにあるかはよく覚えていませんが、問題ないようです)
したがって、アプリのある時点で、次のコードをヒットしました。
問題は、デバッガーが、クラス A がシリアライズ可能としてマークされていないことを嘆いていることです。
しかし、私はAをシリアライズしたくありません.Bをシリアライズしたいのですが、それはサブオブジェクトCです.
オブジェクトグラフですべて相互接続されているため、親オブジェクト A もシリアル化しようとしていると思います。しかし、この時点でシリアル化から除外する方法はありますか?
java - Java オブジェクトがシリアライズ可能であり、クローン可能ではないことが理にかなっているのはいつですか?
Java クラスがSerializable
インターフェースを実装しているがパブリック メソッドを持たない場合clone()
、通常は次のようなディープ コピーを作成できます。
私はこのようなサードパーティのライブラリ クラスによく遭遇し、上記のようなハックに頼っています。ObjectOutputStream
場合によっては、コピーを浅くするために拡張することさえありました。非効率的であること以外に、重大な問題が発生したことはありません (エンコード/デコードが遅く、一時的なシリアル化グラフが大量のメモリを消費する可能性があります)。
この手法を安全に使用できない場合は、おそらくクラスを宣言すべきではありませんSerializable
。
だから私が知りたいのは、あなたのクラスSerializable
が.clone()
Cloneable
.net - シリアル化なしで .NET クラス インスタンスをディープ コピーする
サードパーティ DLL のインスタンス クラスを使用しており、特定のインスタンスでディープ コピーを実行する必要があります。クラスは としてマークされていないため、 を使用してこの提案された方法をSerializable
使用することはできません。BinaryFormatter
シリアル化を使用せずにこのオブジェクトのディープ コピーを取得するにはどうすればよいですか?
java - Javaで配列リストをあるクラスから別のクラスにコピーするにはどうすればよいですか?
配列リストをコピーして2つのリストを互いに独立させるには、ディープコピー(参照だけでなく、あるリストから別のリストにオブジェクトをコピーする)を使用する必要があることを理解していますが、これをクラス間で行う方法はありますか? ?
例えば; Class1からClass2を呼び出しています。Class2では、オブジェクトはイベント時にカスタムオブジェクトのArrayListに追加されます。このArrayListをClass1に転送できるようにしたいのですが、試行するたびにNullPointerを取得します。
手がかりはありますか?
ruby-on-rails - Rails、Attachment_fu-データベースストレージの添付ファイルのディープコピー
私は、attachment_fuを使用してユーザーからのファイルのアップロードを受け入れるモデル、たとえばAttachmentsを持っています。添付ファイルを「ディープコピー」(またはRuby-eseではディープクローン)して、「db_files」テーブルに完全に新しいバイナリオブジェクトを作成したいと思います。
私はそれがまだ完全に解決された問題ではないことを発見しました。このブログ投稿: http ://www.williambharding.com/blog/rails/rails-faster-clonecopy-of-attachment_fu-images/
ファイルシステムベースのストレージで機能するとされるメソッドを示します。dbベースのストアの場合、「ディープコピー」は失敗します。新しい「添付ファイル」が作成されますが、既存のdb_file_idを使用するため、浅いコピーが実行されます。
attachment_fuのdb_file_backend.rbの中に、saveメソッドがあります。
だから、私はこれを解読しようとしています。これを確認することはできませんが、「build_db_file」はDbFile.newのRubyメタプログラミングの魔法の省略形であると信じています(ソースを取得すると、これについての言及はなく、Googleで見つけることもできません)。
それが何をしているのかよくわかりませんが、私の理論では、db_fileは(リンクされたコードの)「ディープコピー」の試みの一部としてソースobjからコピーされているため、作成。
私の最初の理論は、深いコピーを試みると親(添付ファイル)オブジェクトが「新規」に設定されるというものでした。したがって、次のようなことを行いました。
これは実際には複製されたオブジェクトに対しては正常に機能しますが、残念ながら、複製されていない通常のファイルアップロードのすべてのテストは失敗します。Attachmentオブジェクトは作成されますが、db_fileにデータは書き込まれません。理論では、親オブジェクトが最初に保存され、次にdb_fileのものが後で書き込まれるため、new_record?falseを返します。
そこで、実験として、次のことを試してみることにしました。
これは部分的に機能します-db_fileにデータが入力されますが、db_file.saveでエラーが発生します!--db_fileがnilであると言っています。
だから、私は一種の窮地に立たされています。さらに試行錯誤することはできますが、この時点で、このプラグインがどのように機能するかについての理解が限られています。私は本当にこれほど多くの時間を費やすことを期待していなかったし、したくなかったので、attachment_fuをこれ以上探求するのは気が進まないが、それを理解するためにうさぎの穴を下る必要があるのではないかと心配している。何かアイデアや考えはありますか?
ありがとう!!