※この記事はUdemyの
「現役シリコンバレーエンジニアが教えるPython3入門+応用+アメリカのシリコンバレー流コードスタイル」
の講座を受講した上での、自分用の授業ノートです。
講師の酒井潤さんから許可をいただいた上で公開しています。
##■リストを代入した場合の挙動
list_copy
x = [1, 2, 3, 4, 5]
y = x
y[0] = 100
print('x = ', x)
print('y = ', y)
result
x = [100, 2, 3, 4, 5]
y = [100, 2, 3, 4, 5]
x
をいじっただけなのに、y
にまで変更が及んでしまう。
list_copy
x = [1, 2, 3, 4, 5]
y = x.copy()
y[0] = 100
print('x = ', x)
print('y = ', y)
result
x = [1, 2, 3, 4, 5]
y = [100, 2, 3, 4, 5]
x
の代わりにx.copy()
とすることで、
「x
そのもの」ではなく「x
のコピー」をy
に代入することができる。
##■なぜ影響が及んだのか #####◆別のid ```python:id_different X = 20 Y = X Y = 5 print('X = ', X) print('Y = ', Y) print('id of X =', id(X)) print('id of Y =', id(Y)) ``` ```:result X = 20 Y = 5 id of X = 4364961520 id of Y = 4364961040 ``` リストではなく、数値で同様にしてみると、`Y`を書き換えても`X`には影響が出ない。 `id()`を使って、`X`と`Y`のidをみてみると、それぞれ別のidとなっていることが確認できる。
#####◆同じid
id_same
X = ['a', 'b']
Y = X
Y[0] = 'p'
print('X = ', X)
print('Y = ', Y)
print('id of X =', id(X))
print('id of Y =', id(Y))
result
X = ['p', 'b']
Y = ['p', 'b']
id of X = 4450177504
id of Y = 4450177504
リストではY
の書き換えにより、X
にも影響が出ている。
この場合idをみてみると、X
もY
も同じidをさしていることがわかる。
id_same
X = ['a', 'b']
Y = X.copy()
Y[0] = 'p'
print('X = ', X)
print('Y = ', Y)
print('id of X =', id(X))
print('id of Y =', id(Y))
result
X = ['a', 'b']
Y = ['p', 'b']
id of X = 4359291360
id of Y = 4359293920
.copy()
により回避した場合は、
X
とY
のidが異なっていることがわかる。