両方

2017-06-25 7 views
-1

を変更せずに別の変数を使用して定義されたPythonの変数は、以下のコードを見てください:両方

import numpy as np 
list1 = [1,2,3] 
list2 = list1 
list2.append(4) 
print list2 
print list1 

結果は[1,2,3,4]両方のプリントのために。私はlist2に[1,2,3,4]を、list2には '4'を追加しただけでlist1に[1,2,3]を持つことを期待していました。代入list2 = list1がlist2の命令をlist1に転送したようです。

まず、変数Aを変数Bと同じにする方法があるのは理解したいと思いますが、Bの命令(例:再割り当てなど) Bを修正しますが、Aは修正しませんか?

もちろん、私は

list1 = [1,2,3] 
list2 = [1,2,3] 
list2.append(4) 

を行うと、私が欲しいものを得ることができます。しかし、list1が、(numpy)100x100アレイと言うとどうでしょうか?それから、リスト1を手動で書き換える以外の方法で別の変数にコピーする方法があります。

私は経験豊富なプログラマーではなく、Pythonの初心者です。私はこの質問を公式に公式化しようとしましたが、このサイトで直接答えたものは見つかりませんでした。私が逃した可能性のあるものに私をリダイレクトし、前もって謝罪を受け入れてください。ありがとう!

+0

普通のPythonのリストを表示していますが、numpyのことを話すことに注意してください。異なる獣:https://stackoverflow.com/questions/3059395/numpy-array-assignment-problem –

+1

あなた自身の質問に答えました。 Pythonでは、代入*は決してコピーしません。コピーが必要な場合は、明示的にコピー*を作成する必要があります。 'numpy'配列は、使用できる' .copy'メソッドを提供します。 Ned Batchelderの[Pythonの名前と値についての事実と誤解](https://nedbatchelder.com/text/names.html)をチェックしてください。 –

+0

ありがとう、非常に有用な情報! – orion2112

答えて

0

これは動作します。

list1 = [1,2,3] 
list2 = list1[:] 

さて、list2.append(4) --->list1には影響しません。

list1list2が同じ変数を参照するように、参照をコピーするだけです。

+0

しかし、 '[;]'はnumpyの 'array'のコピーを作成しませんので注意してください。 – hpaulj