Python 基本講座

オブジェクトのコピー

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
オブジェクト指向言語においてオブジェクトをコピーする意味を説明します。
講師:
07:00

字幕

このレッスンでは オブジェクト指向言語において オブジェクトをコピーする意味を 説明します まず 簡単なリストを用意します 「v」は「1」「2」「3」 3つの整数からなるリストです これを「=」 等号の記号を使って 「u」に代入します 「u」は「v」と同じです 「v」の「0」番目の要素を 「-1」にしてみましょう 「v」の最初の要素が 「-1」になっているのがわかります この時 実は 「u」も変更されていて 先頭が「-1」になっています これは 「v」と「u」が 変数の名前は違いますが 実体は全く同じものを参照しているために 起こる現象です こうした現象を 回避するために使われるのが 「copy」モジュールです まずはインポートしてみましょう 「copy」モジュールを使って 「v」をコピーします 「copy」モジュールの 「copy」というメソッドの引数に 「v」をとって 「w」という 別の変数に代入しましょう 「w」は今 先ほどの「v」と同じように 先頭が「-1」になっています ここで 「v」の 最初の要素を 「1」に戻します そうすると もちろん 「v」は変更されていますし 「u」も変更されています ですが 「w」は変更されていません これは「w」と 「v」や「u」の実体が 違うということを意味しています ちなみにリストの場合には 「copy」モジュールの 「copy」というメソッドを使わなくても スライスで全く添え字を指定しない このような書き方でも 同じことを実現できます これですべてが解決したように 思えるのですが 実は もうひとつ問題があります リストのリストを考えてみましょう 少し複雑ですが リストの「1」番目の要素が 「1」と「2」からなるリスト 「2」番目の要素が 「3」と「4」からなるリスト を考えます このようなリストには 添え字を連続で与えることで アクセスできて 「v」の「0」番目は 「1」と「2」からなるリストなので さらに その最初の要素とすると 「1」が返ってきます これを先ほどと同じように 「u」にコピーしたいのですが ただ代入すると 実体が同じになってしまいますので 「copy.copy」モジュールを使って 「v」をコピーします 「u」もリストのリスト になっているのがわかります ここで 「v」の最初のリストの 最初の要素を 「-1」にしてみましょう 「v」は このように変更されています 「u」をみてみると 実は 「u」も変更されてしまっています 「copy」モジュールの 「copy」というメソッドを使ったのに なぜ 変更されてしまっているかというと コピーには 実は 浅いコピー 「shallow copy」 とも言いますが これと 深いコピー 「deep copy」 の2種類があります 単なるリストであれば 「copy.copy」の「shallow copy」でも うまく動作しますが リストの中に 更にリストが含まれているような場合には うまく機能しません このような場合には 「copy」モジュールの 「deepcopy」を使います 「deepcopy」の引数に「v」を渡して それを「w」に格納します 「w」は今 先ほどの「v」と同じです ここで 同じように 「v」の最初の要素を 「1」に戻してみましょう 「v」は変更されていて 「u」も変更されています ですが 「w」は 「deep copy」になっているため リストの中に含まれるリストも 別の実体になっています このレッスンでは オブジェクト指向において オブジェクトをコピーするという意味を 説明して 「copy」モジュールの使い方を 紹介しました

Python 基本講座

Pythonはシンプルな文法や豊富な標準ライブラリが特徴なので、誰でも手軽にプログラミングを始められます。このコースはでPythonの説明からプログラミングのための基本的な事柄などについて説明します。Pythonにはライブラリと呼ばれるプログラムを作るときに使える便利な部品もたくさん含まれているので、これらの使い方も具体例を挙げながら紹介します。

5時間04分 (62 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 3,990
発売日:2015年08月11日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。