LoginSignup
0
0

More than 3 years have passed since last update.

【Udemy Python3入門+応用】 19.リストのコピー

Last updated at Posted at 2020-03-01

※この記事は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
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()を使って、XYの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をみてみると、XYも同じ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()により回避した場合は、
XYのidが異なっていることがわかる。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0