- ベストアンサー
Python:浅いコピーと深いコピー
(1) rgba = rgb(代入)は浅いコピー(参照渡し)、 rgba = rgb.copy()(コピーメソッド)と rgba = rgb[:](スライス代入?)は深いコピー(値渡し)と理解してよいのでしょうか? copy()(コピーメソッド)は浅いコピーと書いてあります。 https://atmarkit.itmedia.co.jp/ait/articles/1906/04/news009_4.html#shallowcopy (2)上記リンクに「intlist1[0]へ代入をすれば、名札の付け替えが行われる」とありますが、rgb.append("Alph")、rgb[-1]="Alpha"、rgba.append("Alph")、rgba[-1] = "Alpha"のどれをやってもid変わりません。 上記2点ってPythonの仕様変更ですか? コード(Google colabo) rgb = ["Red"] # ["Red", "Green", "Blue"] print('\n', 'rgba = rgb') rgba = rgb print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgb.append("Alph")') rgb.append("Alph") print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgb[-1]="Alpha")') rgb[-1]="Alpha" print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgba.append("Alph")') rgba.append("Alph") print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgba[-1] = "Alpha"') rgba[-1] = "Alpha" print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgba = rgb.copy()') rgba = rgb.copy() print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgba = rgb[:]') rgba = rgb[:] print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgb.append("Alph")') rgb.append("Alph") print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgb[-1]="Alpha")') rgb[-1]="Alpha" print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgba.append("Alph")') rgba.append("Alph") print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) print('\n', 'rgba[-1] = "Alpha"') rgba[-1] = "Alpha" print(rgb, rgba) print('id(rgb)', id(rgb), 'id(rgba)', id(rgba)) 実行結果 rgba = rgb ['Red'] ['Red'] id(rgb) 135952212587840 id(rgba) 135952212587840 rgb.append("Alph") ['Red', 'Alph'] ['Red', 'Alph'] id(rgb) 135952212587840 id(rgba) 135952212587840 rgb[-1]="Alpha") ['Red', 'Alpha'] ['Red', 'Alpha'] id(rgb) 135952212587840 id(rgba) 135952212587840 rgba.append("Alph") ['Red', 'Alpha', 'Alph'] ['Red', 'Alpha', 'Alph'] id(rgb) 135952212587840 id(rgba) 135952212587840 rgba[-1] = "Alpha" ['Red', 'Alpha', 'Alpha'] ['Red', 'Alpha', 'Alpha'] id(rgb) 135952212587840 id(rgba) 135952212587840 rgba = rgb.copy() ['Red', 'Alpha', 'Alpha'] ['Red', 'Alpha', 'Alpha'] id(rgb) 135952212587840 id(rgba) 135951358069184 rgba = rgb[:] ['Red', 'Alpha', 'Alpha'] ['Red', 'Alpha', 'Alpha'] id(rgb) 135952212587840 id(rgba) 135951358898688 rgb.append("Alph") ['Red', 'Alpha', 'Alpha', 'Alph'] ['Red', 'Alpha', 'Alpha'] id(rgb) 135952212587840 id(rgba) 135951358898688 rgb[-1]="Alpha") ['Red', 'Alpha', 'Alpha', 'Alpha'] ['Red', 'Alpha', 'Alpha'] id(rgb) 135952212587840 id(rgba) 135951358898688 rgba.append("Alph") ['Red', 'Alpha', 'Alpha', 'Alpha'] ['Red', 'Alpha', 'Alpha', 'Alph'] id(rgb) 135952212587840 id(rgba) 135951358898688 rgba[-1] = "Alpha" ['Red', 'Alpha', 'Alpha', 'Alpha'] ['Red', 'Alpha', 'Alpha', 'Alpha'] id(rgb) 135952212587840 id(rgba) 135951358898688
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (9)
- cametan_42
- ベストアンサー率62% (166/266)
- notnot
- ベストアンサー率47% (4902/10363)
- cametan_42
- ベストアンサー率62% (166/266)
- notnot
- ベストアンサー率47% (4902/10363)
- notnot
- ベストアンサー率47% (4902/10363)
- notnot
- ベストアンサー率47% (4902/10363)
- cametan_42
- ベストアンサー率62% (166/266)
- cametan_42
- ベストアンサー率62% (166/266)
- notnot
- ベストアンサー率47% (4902/10363)
お礼
辛抱強くご教示いただきましてありがとうございます。というよりも、全力で(調べて)質問文を書いていますが、深い「何か」、浅い「何か」の「何か」に対応する用語が見つからないため、正しい言葉で質問できず申し訳ありません。層ではなく、親・子・孫・ひ孫というんですね。 ”最浅層”(子)でわかりました。つまりこういう事ですね。 Google Colabo a = [[[[[1], 2], 3], 4], 5] b = a[:] print(a) print(b) print('a[1]=6') a = [[[[[1], 2], 3], 4], 5] b = a[:] a[1] = 6 print(a) print(b) print('a[0][1]=6') a = [[[[[1], 2], 3], 4], 5] b = a[:] a[0][1] = 6 print(a) print(b) print('a[0][0][1]=6') a = [[[[[1], 2], 3], 4], 5] b = a[:] a[0][0][1] = 6 print(a) print(b) print('a[0][0][0][1]=6') a = [[[[[1], 2], 3], 4], 5] b = a[:] a[0][0][0][1] = 6 print(a) print(b) print('a[0][0][0][0][0]=6') a = [[[[[1], 2], 3], 4], 5] b = a[:] a[0][0][0][0][0] = 6 print(a) print(b) 実行結果 [[[[[1], 2], 3], 4], 5] [[[[[1], 2], 3], 4], 5] a[1]=6 [[[[[1], 2], 3], 4], 6] [[[[[1], 2], 3], 4], 5] a[0][1]=6 [[[[[1], 2], 3], 6], 5] [[[[[1], 2], 3], 6], 5] a[0][0][1]=6 [[[[[1], 2], 6], 4], 5] [[[[[1], 2], 6], 4], 5] a[0][0][0][1]=6 [[[[[1], 6], 3], 4], 5] [[[[[1], 6], 3], 4], 5] a[0][0][0][0][0]=6 [[[[[6], 2], 3], 4], 5] [[[[[6], 2], 3], 4], 5]