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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1246閲覧

Python リストにリストを代入した際、Clearの影響範囲

ngh_orange

総合スコア17

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/02 17:04

初心者のため質問がわかりづらかったら申し訳ないです。

前提・実現したいこと

リストA、リストBがあったとして、リストAにリストBをappendで入れています。
リストBの値をリストAにリストとして(二次元リスト)入れたいです。
リストAに代入し終わったあと、リストBはまた新しい値を取得させたいのでClearメソッドを使ったのですが
すでに代入されているリストAにも影響が出てしまいます。これを直したいです。
具体的には、リストBの要素をリストAに入れたあと、リストBをClearしてもリストAの値は保持されたままにしたいです。

appendで入れてclearで消していますが、
リスト末に入れたいのとBが持っている要素が削除できればメソッドにこだわりはないです。

該当のソースコード

Python

1 2A = [[]] 3B = [] 4B.append((value1,value2)) 5A.append(B) 6B.clear()

リストBにvalue1とvalue2を代入。

リストBに入ってる要素をリストAにappend

リストBにはまた新しいvalue1、value2を取得させたいためClearで消す

リストAの要素もなくなってしまう。 ←ここを直したいです。

試したこと

clearされなければAは値を保持し続けてくれるのですが、当たり前ですが一度値を削除しないと次にリストBを代入するときに先の情報をもう一度代入してしまいます。

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

Python 3.9.7
windows10
VSCode

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

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

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

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

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

guest

回答3

0

ベストアンサー

公式ドキュメント FAQ なぜ list 'y' を変更すると list 'x' も変更されるのですか?で書かれている問題ですね。

リストAに入れる要素としてリストBそのものを使うのではなくBのコピーを使うことで問題は解決します。
そのものではなくコピーである場合には == は成立しますが is ではありません。

リストのコピーを作る方法は色々とあります。
A.append(B.copy())
A.append(B+[])
A.append(B[:])
などを使ってください。

投稿2021/11/02 22:31

ppaul

総合スコア24666

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

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

ngh_orange

2021/11/03 01:51

お恥ずかしいこんな簡単なところ、というか公式に載っていたんですね確認不足でした..... 無事できました、ありがとうございます!
guest

0

投稿2021/11/02 22:09

katoy

総合スコア22324

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

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

0

python3

1A = [[]] 2B = [] 3B.append((1,2)) 4A.append(B[:]) 5B.clear()

投稿2021/11/02 19:30

Nippun

総合スコア1147

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問