問題タブ [shallow-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 プログラミング」の入門書であるHow to think like a computer scientistを読んでいます。
*
リストに適用されたときの乗算演算子 ( ) の動作を明確にしたいと思います。
関数make_matrixを考えてみましょう
実際の出力は
make_matrixの正しいバージョンは次のとおり です。
make_matrixの最初のバージョンが失敗する理由(本の 9.8 で説明されているように) は、
...各行は他の行のエイリアスです...
なぜだろう
原因...各行は他の行のエイリアスです...
だがしかし
つまり、行のそれぞれ[0]
が他の行要素のエイリアスではない理由です。
java - Javaでは、浅いコピーとは何ですか?
java.util.Calendar.clone()は、「...同じプロパティを持つ新しいカレンダー」を返し、「このカレンダーの浅いコピー」を返します。
ここでSOで回答されているように、これは浅いコピーではないようです。その質問は言語に依存しないというタグが付けられており、 Javaは言語に依存しない定義に従っていないようです。コードをステップスルーすると、言語に依存しない構造だけでなく、構造と要素がこの新しいオブジェクトにコピーされていることに気付きます。
Javaでは、浅いコピーとは何ですか?
Javaディープコピー(存在する場合)とどのように異なりますか?
list - Scalaでリストをコピーする方法
Scalaでリストを浅くコピーしたい。
私は次のような何かをしたかった:
ただし、cloneメソッドは保護されています。
c++ - 浅いコピーはポインタを共有しますか? (C++)
私がこのようなことをすれば、私はそれを知っています:
次にObj1
とは同じ を指しObj2
ますが、同じポインタを共有しますか? すなわち:nine
8
は をObj2
指しnine
ますかNecronine
, または を 指し 続け8
ます ?
perl - Perlハッシュ参照の浅いコピーを作成するにはどうすればよいですか?
ハッシュへの参照をプッシュしたい。つまり、与えられたハッシュの浅いコピーである新しいハッシュへの参照をプッシュしたいということです。
浅いコピーを作成するにはどうすればよいですか?
c++ - char []を含む構造には、浅いコピーで十分ですか?
他のメンバー関数を持たない文字配列を含む構造体があります。これらの構造体の2つのインスタンス間で代入演算を行っています。私が間違えなければ、それは浅いコピーをしている。この場合、浅いコピーは安全ですか?
これをC++で試しましたが、機能しましたが、この動作が安全かどうかを確認したいと思います。
java - Java での Map の浅いコピー
Map
私が理解しているように、Javaで a の浅いコピーを作成するには、いくつかの方法があります(おそらく他の方法も) :
ある方法が他の方法よりも優先されますか? もしそうなら、それはなぜですか?
言及する価値のあることの 1 つは、2 番目の方法では「Unchecked Cast」という警告が表示されることです。そのため、それを回避するために追加@SuppressWarnings("unchecked")
する必要がありますが、これは少しイライラします (以下を参照)。
c++ - C ++でmemcpyを使用して、ポインターや仮想関数を持たないクラスをコピーできますか?
次のようなクラスがあるとします。
クラスにポインタや仮想メソッドがない場合、次のものを使用しても安全ですか?
私が尋ねる理由は、ここで説明するように、ページングされたデータの非常に大きなコレクションを扱っているためです。ここでは、パフォーマンスが重要であり、memcpyは反復割り当てよりもパフォーマンスが大幅に向上します。'this'ポインターは保存されているものではなく暗黙のパラメーターであるため、問題ないはずですが、他に注意すべき隠れた厄介な点はありますか?
編集:
Sharptoothsのコメントによると、データにはハンドルや同様の参照情報は含まれていません。
Paul Rのコメントによると、私はコードのプロファイルを作成しました。この場合、コピーコンストラクターを回避する方が約4.5倍高速です。ここでの理由の一部は、テンプレート化された配列クラスが、与えられた単純な例よりもいくらか複雑であり、浅いコピーを許可しない型にメモリを割り当てるときに配置を「新規」と呼ぶことです。これは事実上、デフォルトのコンストラクターとコピーコンストラクターが呼び出されることを意味します。
2番目の編集
このようにmemcpyを使用することは悪い習慣であり、一般的な場合には避けるべきであることを私は完全に受け入れることを指摘する価値があるかもしれません。それが使用されている特定のケースは、コピーコンストラクタではなくmemcpyを呼び出すパラメータ'AllowShallowCopying'を含む高性能テンプレート配列クラスの一部としてです。これは、配列の先頭近くの要素を削除したり、セカンダリストレージにデータをページングしたり、セカンダリストレージからデータをページングしたりするなどの操作に大きなパフォーマンスの影響を及ぼします。より良い理論的解決策は、クラスを単純な構造に変換することですが、これには大きなコードベースの多くのリファクタリングが含まれるため、それを回避することは私がやりたいことではありません。
c# - C#でオブジェクトを「this」オブジェクトにコピーする
あるオブジェクトから別のオブジェクトにすべてのパブリック プロパティをコピーする機能を必要とするクラスの特定の階層があります。各クラスには、他のクラス とは異なる可能性が
ある特定のパブリック プロパティのセットがあります。
例:
グーグルを通じて、これらの方法について読みました:
- リフレクションの使用
- IL コードの生成
- シリアル化
それらはすべて、非常に複雑か非常に遅いか、場合によってはその両方です。
何か不足していますか?this
生ポインタにアクセスする他の方法はありますか?
編集:
明確にします。
T は、呼び出しクラスの型です。たとえば、D1 によって呼び出された場合、T は常に D1 になります。
ジェネリックの理由は、T が何であるかを実際に知ることができないためです。
何か不足していますか?パラメータとして
使用する必要がありますか?Base data