rubyでやってたアレ、pythonでどうやる? 〜 リストの複製

ruby

ary = [1,2,3]      # => [1, 2, 3]
ary.object_id      # => 2168514860

# 代入しても
ary2 = ary         # => [1, 2, 3]
# 参照先は同じ
ary2.object_id     # => 2168514860

# dupだと
ary3 = ary.dup     # => [1, 2, 3]

# 新しいリストオブジェクトになる
ary3.object_id     # => 2168523280

# Arrayのコンストラクタ
ary4 = Array.new(ary) # => [1, 2, 3]

# 新しいリストオブジェクトになる
ary4.object_id     # => 2164376320

python

ary = [1,2,3]      # => [1, 2, 3]
id(ary)            # => 1944952

# 代入しても
ary2 = ary
ary2               # => [1, 2, 3]
# 参照先は同じ
id(ary2)           # => 1944952

# スライシングを使って複製
ary3 = ary[:]
ary3               # => [1, 2, 3]
# 新しいリストオブジェクトになる
id(ary3)           # => 1960816

# list関数で複製
ary4 = list(ary)
ary4               # => [1, 2, 3]
# 新しいリストオブジェクトになる
id(ary4)           # => 1971464


pythonのスライシングを使ったリストの複製は、慣れていない人には暗号みたいでわかりづらいので、
list関数を呼ぶほうが良いですね