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

【Python】スライス演算子を使ってリストをコピー・複製する方法

この記事では、ユーザーが入力したリストをコピー(複製)するPythonプログラムを紹介します。リストの複製には「スライス」のテクニックを使用します。スライス演算子(:)を使うことで、元のリストとは独立した新しいリストオブジェクトを作成できます。この操作は「クローニング」とも呼ばれます。

なお、Pythonでは単純に b = a のように代入すると、リストそのものがコピーされるわけではありません。これは同じオブジェクトへの参照が渡されるだけなので、片方を変更するともう片方も一緒に変わってしまいます。これを避けるためには、明示的なコピーを行う必要があります。

アルゴリズム

Step 1: リストの要素を入力する。
Step 2: スライス演算子([:])を使ってリストを複製する。

サンプルコード

# Pythonプログラム:スライス演算子を使ってリストをコピー・複製する
def copyandcloning(cl):
    copylist = cl[:]
    return copylist

# ドライバーコード
A = list()
n1 = int(input("リストのサイズを入力してください ::"))
print("リストの要素を入力してください ::")
for i in range(int(n1)):
    k = int(input(""))
    A.append(k)
clon = copyandcloning(A)
print("複製前の元のリスト:", A)
print("複製後のリスト:", clon)

実行結果

リストのサイズを入力してください ::6
リストの要素を入力してください ::
33
22
11
67
56
90
複製前の元のリスト: [33, 22, 11, 67, 56, 90]
複製後のリスト: [33, 22, 11, 67, 56, 90]

コードの解説

ポイントは関数内の copylist = cl[:] の部分です。スライス [:] は「先頭から末尾までのすべての要素」を表し、実行すると新しいリストオブジェクトが生成されます。元のリストと複製されたリストはそれぞれ独立したオブジェクトであるため、どちらか一方を変更しても、もう一方には影響しません。

実際に確認してみましょう。

a = [1, 2, 3]
b = a[:]      # スライスによるコピー
b.append(4)
print(a)  # [1, 2, 3]     ← 元のリストは影響を受けない
print(b)  # [1, 2, 3, 4]  ← コピー先だけ変更されている

その他のリストのコピー方法

スライス以外にも、次のような方法でリストをコピーできます。

  • list(元のリスト) — listコンストラクタを使う方法
  • 元のリスト.copy() — リストのcopy()メソッドを使う方法(Python 3.3以降)
  • copy.deepcopy(元のリスト) — ネストされたリスト(多次元リスト)まで完全に複製したい場合

ただし、スライスや copy() によるコピーは「浅いコピー(シャローコピー)」です。リストの中にさらにリストが含まれている場合、内側のリストまでは複製されず参照が共有される点に注意してください。入れ子構造を持つデータを完全に複製したい場合は、標準ライブラリの copy.deepcopy() を使用しましょう。

  1. Pythonでリストの累積和(累積合計)を求める方法

    この記事では、リストの累積和(累積合計)を求める問題の解決策について詳しく解説します。問題文あるリストが与えられたとき、各要素までの累積和を格納した新しいリストを作成する必要があります。例えば、[10, 20, 30, 40, 50] というリストが与えられた場合、出力は [10, 30, 60, 100, 150] となります。これは、各位置でそれ以前の要素をすべて足し合わせた値です。実装例それでは、実際の実装を見ていきましょう。# 累積和を求める関数 def Cumulative(l): new = [] cumsum = 0 for element in l:

  2. Pythonでリストをコピーする方法まとめ:スライス、list()、copyモジュールの使い分け

    Pythonでは、代入演算子(=)を使っても新しいオブジェクトは作成されません。既存のオブジェクトに別の名前(参照)を付けるだけです。この挙動は、組み込み関数 id() を使うことで確認できます。 >>> L1 = [1,2,3,4] >>> L2 = L1 >>> id(L1) 185117137928 >>> id(L2) 185117137928 L1 と L2 のIDが同じであることから、両者が同一のオブジェクトを参照していることがわかります。つまり、どちらか一方を変更するともう一方にも影響が及びます。リストを