質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

163閲覧

[Python]リストオブジェクトのclearメソッドの範囲について。

namo

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/14 02:33

編集2018/10/14 02:35

前提・実現したいこと

Python初心者で、1から勉強しています。
リストオブジェクトのclearメソッドの挙動を知りたい。

発生している問題・エラーメッセージ

リストオブジェクトのclearを使用して、List3をList3.clear()すると、 List2もクリアされてしまう。 実行結果 <filter object at 0x03E71730> list2:[100, 110, 120, 322, 130, 140] list2:[100, 110, 120, 130, 140] list3:[100, 110, 120, 130, 140] list3:[]←これは想定通り list2:[]←list2はクリアしたくない。なぜクリアしてしまうのか?

該当のソースコード

a = range(100,150,5) list(a) def is_even(x): return x % 2 == 0 filter = filter(is_even, a) print(filter) list2 = list(filter) list2.insert(3, 322) print('list2:' + str(list2)) list2.remove(322) print('list2:' + str(list2)) list3 = list2 print('list3:' + str(list3)) list3.clear() print('list3:' + str(list3)) print('list2:' + str(list2))

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

PYTHON WINDOWS10 IDLE 3.7.0
にて実行した結果です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

pythonでは代入は参照の代入であり、オブジェクトのコピーを生成しません。list3 = list2は単にlist2という名前が指し示しているオブジェクトをlist3も指し示すようにするという操作に過ぎません。

オブジェクトのコピーを生成する必要がある場合、何通りかの方法があります。

python

1# 方法1 スライスが新しいオブジェクトを返すことを利用する 2list3 = list2[:] 3 4# 方法2 list.copy()メソッドを使う 5list3 = list2.copy() 6 7# 方法3 list(x)で新たにインスタンスを生成する 8list3 = list(list2) 9 10# 方法4 copyモジュールを使う 11from copy import copy 12list3 = copy(list2)

これは有名な話題なので、公式ドキュメントのプログラミングFAQに解説があります。参考にしてください。

プログラミング FAQ — Python 3.6.5 ドキュメント | なぜ list 'y' を変更すると list 'x' も変更されるのですか?

投稿2018/10/14 02:42

編集2018/10/14 02:46
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namo

2018/10/14 03:30

オブジェクトのコピーを作成しなくていけないのですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問