リストのコピー「参照渡し」「値渡し」
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’]
コメント
[…] pythonでは、関数定義の際 リスト(l = [])は*参照渡しされていますので、 このようになります。 […]