Python 入門 ノート (11)リストのコピー

リストのコピー「参照渡し」「値渡し」

i = [1, 2, 3, 4, 5]
j = i
print('j = ', j)
print('i = ', i)

j = [1, 2, 3, 4, 5]
i = [1, 2, 3, 4, 5]

注意点  「参照渡し」

i = [1, 2, 3, 4, 5]
j = i
j[0] = 100
print('j = ', j)
print('i = ', i)

j = [100, 2, 3, 4, 5]
i = [100, 2, 3, 4, 5]

*C言語の「値渡し」「参照渡し」

’リスト’・’ディクショナリー’は「参照渡し」。メモリのアドレスに保存されている。

copy() 「値渡し」

x = [1, 2, 3, 4, 5]
y = x.copy()・・・・明示的にわかりやすい
y[0] = 100
print('y = ', y)
print('x = ', x)

y = [100, 2, 3, 4, 5]
x = [1, 2, 3, 4, 5]

[:] 「値渡し」・・・見逃しやすい欠点

x = [1, 2, 3, 4, 5]
y = x[:]
y[0] = 100
print('y = ', y)
print('x = ', x)

y = [100, 2, 3, 4, 5]
x = [1, 2, 3, 4, 5]

///////////////////////////////////////////////////////////////////////////////

リストでない場合 (値渡し)

X = 20
Y = X
Y = 5
print(Y)
print(X)

5
20

id

X = 20
Y = X
Y = 5
print(id(X))
print(id(Y))
print(Y)
print(X)

140049880029248
140049880028768         *保存場所が異なる
5
20

リストの場合「参照渡し」

X = ['a', 'b']
Y = X
Y[0] = 'p'
print(id(X))
print(id(Y))
print(Y)
print(X)

140076858028592    *同じ保存場所
140076858028592
[‘p’, ‘b’]
[‘p’, ‘b’]

コメント

  1. […] pythonでは、関数定義の際 リスト(l = [])は*参照渡しされていますので、 このようになります。 […]