05-Python

Python(Part.22)| python【リスト(利用編-7)】

python| まとめ | 現役エンジニア&プログラミングスクール講師「python」のまとめページです。pythonに関して抑えておきたい知識や文法やにについて記事をまとめています。まとめページの下部には「おすすめの学習書籍」「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中...

目標

「二次元リスト」(他言語の二次元配列に相当)について理解する。
「シャローコピー」と「ディープコピー」について理解する。

(pythonの)「リスト」の行列表現

二次元リストの作成方法

二次元リストはブラケットを利用して次のように作成することができます。

list_num1 = [ [ 1, 2, 3 ],  [ 4, 5, 6 ], [ 7, 8, 9 ] ] ]

二次元リストのインデックス

二次元リストや三次元リストのように多次元でのリストのインデックスは外側にあるリストのインデックスを左から順番に記述することで指定できます。

記入例

list_num1 = [ [ 1, 2, 3 ],  [ 4, 5, 6 ], [ 7, 8, 9 ] ] ]
print(list_num1[ 1 ][ 2 ]) 

上(list_num1[ 1 ][ 2 ])のように記述するとlist_num1が参照するリストのインデックス1番([4, 5, 6])を指定して、そのあと、[4, 5, 6]の2番目の要素「6」を指定することになります。

変数と二次元リストとの関係

「変数」は「オブジェクト」を結びつけるための名前でした。そして、この名前を利用したリスト(オブジェクト)の参照を図で示すと次のようになります。

上のキャプチャの通り、変数名はリストそのものを参照します(赤矢印)。そして、リストのそれぞれの値も参照(黒矢印)となっています。黒矢印は変数名からの参照ではありません。

二次元リストでも、この関係を維持することになります。二次元リストでは次のように表現できます。

「シャローコピー」と「ディープコピー」

「シャローコピー」

シャローコピー…新規の複合オブジェクトを作成し、中身にはコピー元がもつオブジェクトへの参照がコピーされます。

シャローコピーについては次の記事で確認できます。シャローコピーはミュータブルなイテラブルオブジェクト(リスト、辞書、集合)がもつcopyメソッドを利用して作成できます。

copyメソッドはイミュータブルなオブジェクトでは利用できません。イミュータブルなオブジェクトでコピーを行う場合はcopyモジュールのcopy()関数を利用します。

Python(Part.19)| python【リスト(利用編-4)】【リストのメソッド(2/2)】| 現役エンジニア&プログラミングスクール講師「python」の「リスト」がもつメソッドについて解説しています。index、count、sort、reverse、copyメソッドについて扱っています。...

「ディープコピー」

ディープコピー…新規の複合オブジェクトを作成し、中身にはコピー元のもつオブジェクトへの参照がコピーされ、更に中身に複合オブジェクト存在する場合は複合オブジェクト自体もコピーします。

多次元のリストのディープコピーにはcopyモジュールのdeepcopy()関数を利用します。

import copy

list_num = [ 6, 3, 10, [8, 9]]

list_copy = copy.deepcopy(list_num)
print('要素の変更前')
print(list_num)
print(list_copy)

list_num[ 0 ] = 5
list_num[ 3 ][ 1 ] = 7
print('要素の変更後')
print(list_num)
print(list_copy)

実行結果

実行結果はシャローコピーの時とは異なり、list_num[ 3 ][ 1 ] = 7 部分でlist_num のみ変更が反映され、list_copyには影響(反映)は行われていません。これは、内側の複合オブジェクトのコピーが行われていることにより、そこへの参照をlist_numが示す緑色のオブジェクトではなく、list_copyが新たにもつ緑色のオブジェクトを辿って其々が、値へアクセスできるようになっているためです。

このうち、list_num[ 0 ] = 5、list_num[ 3 ][ 1 ] = 7 と変更した結果は次のように参照が変更されます。

今回は以上になります。

「python」おすすめ書籍 ベスト3 | 現役エンジニア&プログラミングスクール講師「python」の学習でお勧めしたい書籍をご紹介しています。お勧めする理由としては、考え方、イメージなどを適切に捉えていること、「生のpython」に焦点をあてて解説をしている書籍であることなどが理由です。勿論、この他にも良い書籍はありますが、特に質の高かったものを選んで記事にしています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
05-Python

Python(Part.25)| python【反復構造(二重for文)】| [Iterative Structures (double for statement)]

2024年7月4日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
05-Python

Python(Part.26)| python【選択構造(match文)(1)】|  [Selection Structure] (match statement)(1)

2024年7月9日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
05-Python

Python(Part.--)| python【ユーザー定義関数(2)】| 【return文】

2024年8月7日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site