2017-01-24 37 views
0

私はarray or listを持っています。 今、私は配列にいくつかの変更を加えて、arrvariable/listに戻したいと思います。私は余分なスペースを使用していますか?または同じ変数が再び更新されますか?リストの更新に余分なスペースが必要ですか?

arr = [1,2,3,4] 
print arr[2:] + arr[:2] # Is is using extra space 
#or 
arr = arr[2:] + arr[:2] # Is is using extra space 
#or 
arr = [1,2,3,4] 
arr = arr # are not they both same? LHS arr is different from RHS arr 
+0

あなたは "LHSのARRは、RHSの編曲は異なっている" とはどういう意味ですか? –

答えて

2

次のように割り当てる:

arr = arr[2:] + arr[:2] 

あなたがarrの新しい参照を作成している、と古いものが破壊されました。割り当て/削除を意味します。

あなたはスライス割り当て行う必要があります。まだ

arr[:] = arr[2:] + arr[:2] 

arrは、同一の参照を保持し、かつ大きさが変化しない場合は、何のメモリallocatonは(arrのために発生していないが、右側の和&スライスを必要アロケーション)

デモ:

arr = [1,2,3,4] 
old_arr = arr 
arr = arr[2:] + arr[:2] 
print(old_arr is arr) 

結果:False

arr = [1,2,3,4] 
old_arr = arr 
arr[:] = arr[2:] + arr[:2] 
print(old_arr is arr) 

結果:True

0

<1,2,3,4>はメモリのどこかに保存されます。 arrは、<1,2,3,4>への参照を有し、arr[2:]は、の参照を有し、arrは、参照を有する。

数字のリストについては、数字だけでなく、それらの参照に余分なスペースを使用しています。

ハイプロファイルオブジェクトのリストについては、実際にはこれを処理するよりメモリ効率の良い手段になります。

私はこれを読ん勧め:
http://foobarnbaz.com/2012/07/08/understanding-python-variables/

関連する問題