- 2018-8-13
- pythonプログラミング, リスト
- python, コピー, リスト
- 【Python】リストをコピーする2つの方法|目的によって使い分けよう! はコメントを受け付けていません
Pythonにおいて、
大きく見て、リストをコピーする方法は2つあります。
ただ、まったく同じではありません。
1つの方法でリストをコピーした後、
コピー後のリスト内要素を変更すると、
元のリストまで変更されてしまいます。
でも、もう1つの方法でコピーすると
コピー後のリスト内要素を変更しても
元のリストは変更されません。
なので、今回の記事をしっかりと理解していただき
あなたの目的に応じたコピーを実行するようにお願いします。
それではやっていきましょう。
【Python】リスト内要素をコピーする方法その1
まず1番目の方法でリストをコピーしてみましょう。
例題1をご覧ください。
#例題1 a = ['甘え','俺がルール','お人よし','負け犬'] b = a print(a) print(b)
例題1では
b = a
とすることで
リストaをbに代入しています。
その結果、リストaのコピーがリストbとして
出来上がりました。
例題1を実行すると
[‘甘え’, ‘俺がルール’, ‘お人よし’, ‘負け犬’]
[‘甘え’, ‘俺がルール’, ‘お人よし’, ‘負け犬’]
と表示されます。
では例題1のリストbの左から3番目、『お人よし』を
『成功者に変更してみましょう。
#例題1を変更してみる a = ['甘え','俺がルール','お人よし','負け犬'] b = a b[2] = '成功者' print(a) print(b)
リストbの左から3番目というのは
一番左を『0』とカウントするので『2』となります。
なので
b[2] = '成功者'
と書きます。
実行すると
[‘甘え’, ‘俺がルール’, ‘成功者’, ‘負け犬’]
[‘甘え’, ‘俺がルール’, ‘成功者’, ‘負け犬’]
(上がリストa,下がリストb)
と、リストbだけでなくリストaまで
同時に『お人よし』が『成功者』に変更されてしまいました。
例題1の方法でリストをコピーすると
その後、コピーされたリストbの一部を変更した場合
同様にリストaまで変更されてしまいます。
例題1は変更点があったら
コピー元もコピーされたものも
まったく同様に変更したい場合に
おすすめのコピー方法です。
【Python】リスト内要素をコピーする方法その2
それでは2つ目のコピー方法について解説しますね。
#例題2 a = ['甘え','俺がルール','お人よし','負け犬'] b = a.copy() print(a) print(b)
2つ目のリストをコピーする方法は
copy()を使う方法です。
b = a.copy()
とすることで
リストaにある要素をコピーして
リストbに代入することができます。
その結果、実行すると
[‘甘え’, ‘俺がルール’, ‘お人よし’, ‘負け犬’]
[‘甘え’, ‘俺がルール’, ‘お人よし’, ‘負け犬’]
となります。
上がリストaで下がリストbです。
では例題2で、リストbの一部を変更してみましょう。
例題1ではリストbの一部を変更しただけなのに
リストaの一部まで変更されてしまいましたね。
例題2の 場合はどうなるのでしょう?
#例題2(リストbの左から3番目だけ変更)
a = ['甘え','俺がルール','お人よし','負け犬'] b = a.copy() b[2] = '成功者' print(a) print(b)
実行するとリストbだけが変更されました。
[‘甘え’, ‘俺がルール’, ‘お人よし‘, ‘負け犬’]
[‘甘え’, ‘俺がルール’, ‘成功者‘, ‘負け犬’]
(上がリストaで下がリストb)
こんな感じでcopy()を使ったリストのコピー方法だと
コピー後のリストを変更してもコピー元のリストaは
変更されません。
コピー元とコピー後のリストを一心同体でなく
別個独立して活用させたい場合には
copy()によるコピーが有効と言うことですね。
【Python】リスト内要素をコピーする方法まとめ
今回はリストをコピーする2つの方法について解説しました。
一つ目の方法は
#例題1 a = ['甘え','俺がルール','お人よし','負け犬'] b = a print(a) print(b)
で、単純にリストaをbに代入する方法です。
この方法だと、リストbの一部を変更しただけなのに
リストaまで変更されてしまいます。
どうしてそんなことになるのでしょう?
a = ['甘え','俺がルール','お人よし','負け犬']
のリストをbが参照しているという形になるからです。
bは参照しているだけです。
変数a,bともに同じリストを参照しています。
片方のリストの一部を変更したとしても
元のリストが変更されてしまい
リストaもbも同じ変更結果となってしまうんです。
それから2つ目の方法は
#例題2 a = ['甘え','俺がルール','お人よし','負け犬'] b = a.copy() print(a) print(b)
です。
copy()を使った方法です。
2つ目のコピー方法が、ある意味純粋なリストのコピー方法となります。
1つ目の方法みたいに元のリストを参照しているわけではありません。
だから2つ目の方法だと、コピー後のリストbの一部を変更しても
リストaは変更が反映されません。
リストaとリストbを別個独立で扱っていきたい場合に
おすすめのコピー方法になります。
これら2つのコピー方法は混同しやすいです。
pythonを学ぶならこちらの動画講座がおすすめです
Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする
かなり長い講座名ですね。
わかりにくそうな感じがします。ですが、pythonの基礎からしっかりとわかりやすく教えてくれます。
また、きれいなコードを書くための方法についても
教えてくれるので、周りが「どうやってそんなコードを書いてるの?」
とびっくりされるようになるかもしれません。それからWebアプリケーション開発の基本的なテクニックについても
教えてくれます。なので、pythonを使ってwebアプリケーションを作ってみようと
思っている方にもおすすめです。値段は時期によって違います。
詳しくはこちらをご覧ください。
みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習
この講座ではまずpythonの基礎を学びます。
次に人工知能について学んでいきます。そして最終的にはpythonを使って文字認識や株価分析ができるような技術力が身につくようになっています。
単純に教科書的なpythonを学ぶのではなく
仕事でも使えるスキルを身につけたい方におすすめの講座です。なのに値段は恐ろしいほど安いです。
時期によって値段は変動するので
詳しくはこちらをご覧ください。
Pythonで機械学習:scikit-learnで学ぶ識別入門
この動画講座は広島大学准教授の先生が担当しています。
機械学習が専門の先生です。すごく深い知識が身につきます。
大学の先生の講義って難しそうってイメージがあるかもしれません。でもそんなことはありません。
すごくわかりやすいです。pythonで機械学習のスキルを身につけたい方におすすめです。
値段は時期によって違いますが、かなり、良心的な価格になっています。詳しくはこちらをご覧ください。