LoginSignup
10
7

More than 5 years have passed since last update.

pythonでの、変数の処理について詳しく調べてみた

Last updated at Posted at 2016-01-25

運営ブログの記事はこちらpythonの秀逸なオブジェクト保存方法の設計

ここでは、インタープリタで見る、python変数の処理について書いていきます。ファイルから実行する場合には、うまいことググってみてください。

主に、やることとしては「変数を呼び出したいところ(varとかってやってるところ)で、『print var』ってやる」くらいだと思いますが、、

変数の作り方

「変数 = オブジェクト」の順に記入するだけです。

test
var = 9

呼び出し方

 ただ、「var」ってうつ

test
var #9

変数を定義する時に裏側で行われてる 事(多分)

  1. 変数を保存(var)
  2. ポインタ(=の仕事)を用意して、オブジェクトの保存先を変数に記憶
  3. 実際の値(オブジェクト)の割り当て(ここでは9)
    Objectのメモリ空間に含まれる者は、

    1. オブジェクトの値(9)
    2. Type Information(つまりデータ型、Integer)
    3. Reference Counter(変数の入っているアドレス)」
  4. 呼び出す時は、”Pointer”を使ってObjectを参照するだけ
    Pointerは「=」によって定義されてます。= がないとsyntax errorが出ます

具体例var1 = var とした時に何が起こっているのか

間違い
    「var1 は var を呼び出す。そのあと、var がオブジェクト 9 を呼び出している」
正しい
    「var1 は var と同じオブジェクトを参照する。 var1 は直接 オブジェクト9を呼び出している」

確認① var1 = var

まず、var1 = var とする。ここで、仮説を以下のように置く(めっちゃ理系だ。。)

var1 が**直接**オブジェクトのアドレスを参照しているということは
var1 と varは完全に独立(なはず)。
varに新しく何かを**代入(=)**して見る。
varがvar1と完全に独立ならば、varに新しいオブジェクトを代入しても
var1の値は変わらないはず

試してみる。

test
var = 20
var1 = var

var = 30 #var1はvarとは無関係なので、var1の値はそのままのはず。

var #30
var1 = 20

確認②listのappendで新しい値を追加してみる。

同じ値を参照しているはずだから、代入( = )じゃなくて追加( append )の場合ならば、両方とも値は変化するはず。

test
list1 = [1,2]  #list1 [1,2]
list2 = list1  #list2 [1,2]

list1.append(3) # " = " は使ってないからlist2の参照先に新しい値が追加される

list1 #[1,2,3]
list2 #[1,2,3]

やっぱり、代入じゃない限り、変数の参照する先はまったく同じになるらしい。追加とかスライスを行った場合には、変数(ここでは、list1とlist2)は両方とも変更される。(こんがらがってきた、、)

つまり、

  1. 新しく変数に値を代入( = を使う)ー>新しくオブジェクトを作成するので、互いに完全に独立になる。
  2. 新しく変数に値を代入しない( = 使わない)ー>参照している先は同じなので、どっちかを変更すると両方値が変わる

てことは、途中にlist1 = [1,2]とかってのを足してあげると、list1とlist2は完全に独立になるので、結果は変わるはず!

test
list1 = [1,2]  #list1 [1,2]
list2 = list1  #list2 [1,2]

list = [1,2]  #値が同じだけど、" = "を使っているので、全く新しいオブジェクトが作成され、list2とは独立(無関係になる)

list1.append(3) # " = "は使っていないが、新しく作成されたlist1のオブジェクトに値が追加される。list2は無関係なので、そのまま

list1 #[1,2,3]
list2 #[1,2]

ということで個人的には腑に落ちたのでした。(自分の頭でしっかり理解しないと、読んでも絶対わからなそう、、)

10
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7