Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの浅いコピーと深いコピーの操作


Pythonには、 copyというモジュールがあります。 。このモジュールを使用して、ディープコピーとシャローコピーを実行できます。 Pythonでは、代入ステートメントはオブジェクトをコピーしません。ターゲットとメインオブジェクトの間にバインディングを作成します。

このモジュールを使用するには、-

を使用してインポートする必要があります
import copy

メソッドcopy.copy(x)

このメソッドは、オブジェクトxの浅いコピーを作成するために使用されます。シャローコピーの場合、オブジェクトの参照が別のオブジェクトにコピーされます。したがって、コピーされた参照に変更があると、メインオブジェクトのコンテンツが変更されます。

メソッドcopy.deepcopy(x)

このメソッドは、オブジェクトxのディープコピーを作成するために使用されます。ディープコピーの場合、メインオブジェクトからデータを取得して個々のオブジェクトを作成します。したがって、コピーされた参照に変更があった場合でも、メインオブジェクトは同じままです。

サンプルコード

import copy
my_mat = [[11,22,33],[44,55,66],[11,22,33]]
print('Matrix Before Updation: ' + str(my_mat))
new_mat = copy.copy(my_mat) #Make a shallow copy and update on copied object
new_mat[2][0] = 77
new_mat[2][1] = 88
new_mat[2][2] = 99
print('Matrix After Updation: ' + str(my_mat)) #Original Matrix Updated
my_mat = [[11,22,33],[44,55,66],[11,22,33]]
new_mat_deep = copy.deepcopy(new_mat)
print('\nMatrix Before Updation: ' + str(my_mat))
new_mat_deep[2][0] = 77
new_mat_deep[2][1] = 88
new_mat_deep[2][2] = 99
print('Matrix After Updation: ' + str(my_mat)) # Original Matrix unchanged
print('New Matrix: ' + str(new_mat_deep)) # Original Matrix unchanged

出力

Matrix Before Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
Matrix After Updation: [[11, 22, 33], [44, 55, 66], [77, 88, 99]]

Matrix Before Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
Matrix After Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
New Matrix: [[11, 22, 33], [44, 55, 66], [77, 88, 99]]
>
  1. Javaでのディープコピーとシャローコピー

    ディープコピーとシャローコピーはどちらも、さまざまな方法で指定されたオブジェクトのコピーを作成することを指します- 浅いコピー これは基本的にオブジェクトの新しいインスタンスを作成し、元のデータセットから新しく作成されたインスタンスにすべてのデータをコピーします。これは、新しく作成されたインスタンスを元のオブジェクトに具体的にキャストする必要があることを意味します。 「浅いクローン」とも呼ばれます。 例 import java.util.* ; class Demo{    private int[] my_data;    public Demo(i

  2. PythonとTkinterを使用してクリップボードからコピーする

    クリップボードからコピーするには、 clipboard_get()を使用できます Tkinterの方法。例を見て、クリップボードからデータを取得してTkinterウィンドウに表示する方法を見てみましょう。 ステップ- tkinterライブラリをインポートし、tkinterフレームのインスタンスを作成します。 ジオメトリを使用してフレームのサイズを設定します メソッド。 次に、 clipboard_get()を呼び出します クリップボードからテキストを取得し、データを変数 cliptextに保存します 。 クリップボードのテキストを表示するためのラベルを作成します。 クリ