2016-11-07 7 views
0

私は次のような問題を解決しようとしていた。なぜpythonはある変数から別の変数へのポインタを作成するのですか?

は、大学のデータベースに感染し、学生のAR (アカデミックレジストリを)変更したウイルスと仮定する。しばらくすると、ウイルスによって生成されたAR(ARV = x1 x2 x3 x4 x5 x6 x7 x8 x9) 正しいAR(ARC = y1 y2 y3 y4 y5 y6 y7 y8 y9)が得られることが発見された

Y1 = X1、Y2 = X2、Y3 = X8、Y4 = X7、Y5 = X5、Y6 = X6、Y7 = X3、Y8 = X4、Y9 = X9

例:以下の操作を通じて、ARV = 197845602 - > ARC = 190645782

ARVを読み取り、ARCを与えるプログラムを作成します。

私のコードは次のようになります。

pt = input('Type the AR affected by the virus: ') 

arv = list(pt) 
arc = arv 

arc[2] = arv[7] 
arc[3] = arv[6] 
arc[6] = arv[2] 
arc[7] = arv[3] 

jarc = ''.join(arc) 
print('\nCorrect AR:',jarc) 

あなたがコードを実行すると、次のように表示が生成ARC上記の例のそれではないARC。どうして?見つけた。 "arv"は "arc"で変わり、不変のままでなければなりません。

私にはpythonが変数 "arc"から "arv"へのポインタを作成しているようです。誰が私になぜこれが起こるのか説明できますか?どのようにして問題を正しく解決できるのでしょうか?

+0

これは、学校の割り当てですか? – Olian04

+0

Pythonの割り当てでは何もコピーされないためです。 – BrenBarn

+0

その大学の割り当て@ Olian04 – Nelthar

答えて

2

は、ソリューションではなく、リスト記述子の、リストの内容をコピーすることです。

arc = arv[:] 

または

arc = arv.copy() 

短いの理由は、これが言語の定義方法です。さまざまなPythonサイトで歴史について読むことができます。完全な説明はStackOverflowの汎用目的の範囲を超えています。

これは、Pythonが基本的なポインタをどのように実装しているかを示しています。オブジェクトの割り当ては、コピーを作成するのではなく、元のオブジェクトに割り当てられます。これにより、偽のオブジェクトの複製が節約されます。新しいコピーが必要な場合は、ストレージをさらに割り当てる必要があります。

あなたの元、ARVは、ない "不変" であることに注意してください:それは、Pythonの専門用語です。リストは可変オブジェクトです。タプルは不変のコグネイトです。

+0

助けてくれてありがとう! xD – Nelthar

1

行うには、正しいものはコピーを作成します:

arc = arv.copy() 
+0

この便利な回答ありがとうxD – Nelthar

関連する問題