問題タブ [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.

0 投票する
7 に答える
3469 参照

java - Java オブジェクトがシリアライズ可能であり、クローン可能ではないことが理にかなっているのはいつですか?

Java クラスがSerializableインターフェースを実装しているがパブリック メソッドを持たない場合clone()、通常は次のようなディープ コピーを作成できます。

私はこのようなサードパーティのライブラリ クラスによく遭遇し、上記のようなハックに頼っています。ObjectOutputStream場合によっては、コピーを浅くするために拡張することさえありました。非効率的であること以外に、重大な問題が発生したことはありません (エンコード/デコードが遅く、一時的なシリアル化グラフが大量のメモリを消費する可能性があります)。

この手法を安全に使用できない場合は、おそらくクラスを宣言すべきではありませんSerializable

だから私が知りたいのは、あなたのクラスSerializableが.clone()Cloneable


関連: Java でオブジェクトをコピーする

0 投票する
3 に答える
7935 参照

.net - シリアル化なしで .NET クラス インスタンスをディープ コピーする

サードパーティ DLL のインスタンス クラスを使用しており、特定のインスタンスでディープ コピーを実行する必要があります。クラスは としてマークされていないため、 を使用してこの提案された方法をSerializable使用することはできません。BinaryFormatter

シリアル化を使用せずにこのオブジェクトのディープ コピーを取得するにはどうすればよいですか?

0 投票する
2 に答える
4663 参照

java - Javaで配列リストをあるクラスから別のクラスにコピーするにはどうすればよいですか?

配列リストをコピーして2つのリストを互いに独立させるには、ディープコピー(参照だけでなく、あるリストから別のリストにオブジェクトをコピーする)を使用する必要があることを理解していますが、これをクラス間で行う方法はありますか? ?

例えば; Class1からClass2を呼び出しています。Class2では、オブジェクトはイベント時にカスタムオブジェクトのArrayListに追加されます。このArrayListをClass1に転送できるようにしたいのですが、試行するたびにNullPointerを取得します。

手がかりはありますか?

0 投票する
2 に答える
699 参照

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をこれ以上探求するのは気が進まないが、それを理解するためにうさぎの穴を下る必要があるのではないかと心配している。何かアイデアや考えはありますか?

ありがとう!!

0 投票する
4 に答える
3767 参照

c# - NHibernateを使用したディープコピーエンティティ

私は現在、プロジェクトのコスト見積もりを生成する必要がある新しいASP.NETMVCプロジェクトを開始しています。

NHibernate、ASP.NET MVC 1.0、StructureMapを使用しています。

クライアントは、プロジェクトに関するすべての情報を入力できるようにしたいと考えています。情報はさまざまなページにあり、各投稿の間に保持する必要があります。

クライアントは、完了時に名前で保存するオプションを望んでいませんが、まだ保存していなくてもデータベースに保持したいと考えています。そこで、「ドラフトモード」を作成するというアイデアがありました。これにより、ユーザーはプロジェクトの作業を開始し、すべてのページを埋め、「ドラフトモード」をオンにしてデータベースに保持されます。

ただし、ドラフトを管理する必要があります。つまり、ユーザーが既存のプロジェクトの編集を開始するときに、そのコピーを作成し、オブジェクトとそのすべての子をドラフトモードに設定して、データベースにそのコピーを作成する必要があります。 。子からのすべての参照を変更する必要があります。

したがって、オブジェクトをディープコピーし、すべての参照を変更するための最良の方法を見つけようとしています。コピーする必要のあるすべてのエンティティに対してコピークラスを作成する必要はありません。可能。

詳細が必要な場合、または不明な点がある場合はお知らせください。

ありがとう、

チャールズ

0 投票する
3 に答える
18496 参照

python - Python: クラス属性の継承 (リスト)

スーパークラスからクラス属性を継承し、後でサブクラスの値を変更するとうまくいきます。

出力につながります:
10
10
10
5
これは問題ありません: Archer は Unit から値を継承しますが、Archer の値を変更すると、Unit の値は変更されません。

継承された値がリストの場合、浅いコピー効果が発生し、スーパークラスの値も影響を受けます。

出力:
10
10
5
5

スーパークラスからリストを継承するときにリストを「ディープコピー」する方法はありますか?


佐野さんありがとうございました

0 投票する
2 に答える
38941 参照

python - Python でネストされたリストをコピーする

2D リストをコピーしたいので、1 つのリストを変更しても、もう 1 つのリストは変更されません。

1 次元のリストの場合は、次のようにします。

そして今、私が変更してもbaは変更されません。

しかし、これは 2 次元リストでは機能しません。

を変更するbと、aも変更されます。

これを修正するにはどうすればよいですか?

0 投票する
7 に答える
24752 参照

c# - シリアル化可能としてマークせずにクラスをディープコピーする方法

次のクラスがあるとします。

B他のクラスを継承/含む可能性のある別のクラスはどこにありますか。


このシナリオを考えると:

  1. Aは大きなクラスであり、多くの参照型が含まれています
  2. のソースコードにアクセスできないため、マークBを付けることができません[Serializable]B

ディープコピーを実行する次の方法は機能しません。

  1. 使用できないICloneableMemberwiseClone、クラスAに多くの参照型が含まれているため
  2. クラスが大きく、継続的に追加されており、ディープコピーできないAクラス(など)が含まれているため、のコピーコンストラクタを記述できません。B
  3. B含まれているクラス(ソースコードが利用できない場合など)を次のようにマークできないため、シリアル化を使用できません[Serializable]

クラスをディープコピーするにはどうすればよいAですか?

0 投票する
2 に答える
716 参照

c# - C# でのオブジェクトの複製

仮想プロパティを使用して次のクラスを定義しました。

その派生クラスのオブジェクトを複製しようとしています。基本クラスにディープ コピー権を実装する方法は?

0 投票する
1 に答える
1049 参照

java - Java でリスト要素を複製する

type の変数がありますList<RelationHeader>。ここで、このリストのすべての要素を新しいリストにコピーしたいのですが、実際にはすべてのメンバーを値でコピー (複製) したいと考えています。これを行う簡単なコマンドはありますか、それともリストを反復処理して一度に 1 つずつコピーする必要がありますか?