大きな違いでC言語の割り当てと代入演算子内のpython

 

まず、私たちは簡単なCプログラムを見てみましょう:

1 A = 8 2 B = 3、B = 6 4のprintf(" A =%のD、B =%d個の\ n "、B)。
コードの表示

 

私は、プログラムを実行するプログラムは= 8、B = 6をプリントアウトすることができます知っていない限り、学んだC言語のように考えています。

さて、このプログラムのPythonのバージョンを見てみましょう

1 A = 8
 2、B = 3、B = 6
 4 プリント(B) 
コードの表示


結果を見てみましょう:

 

 

すべてが正常なようです。

 

本当に簡単な場合は、[いいえ、それはなぜ私次第です!

 

もう一度、プログラムを探してください。

1名= [ ' 福建省'' 北京'' 上海' ]
 2 NAME2 = 3 NAME2 [1] = ' tainjing [ 
4  プリント(名)
 5  プリント(NAME2)
Pythonプログラム


その結果、我々はそれが思ったものを、まだありません:

[ '福建'、 '北京'、 '上海']

[ '福建省'、 'tainjing'、 '上海']

 

現実には、次のとおりです。

 

 

 なぜ!なぜ!なぜ!

 

次の理由の場合:

  1. C言語変数は、名前にこのデータの場合と同様ボックス、A = 8 8のようであり、この点でPythonはC言語との大きな違いとみなすことができます。

    Pythonの変数は、C言語のポインタに幾分似ているこの8個のデータポイントのようなPythonで= 8。

  各割り当て2. Pythonは新しいデータ(位置)を指すように可変です

 

今、私たちは、これら二つのPythonプログラムを見てみるために戻ってきて、

  :

      = 8

      B = A

      B = 6

  首先语句a = 8说明变量a指向了8这个数据;

  接着语句a = b说明变量b指向了a,也就等同与a与b一起指向了8这个数据;

  最后语句b = 6,说明此时变量b的指向已经发生了改变, 但是变量a的指向并没有改变,变量b现在指向了6这个数据,变量a还是指向原来的数据8;

  所以最后会打印出a = 8,  b = 6.

 

 

  二:

    name = ["fujian", "beijing", "shanghai"]

    name2 = name

    name2[1] = "tianjing"

     

    同样我们可以类似上一个程序那样分析:

    首先第一条语句说明变量name指向了一个列表;

    第二条语句说明变量name2与name指向了同一个列表;

    第三条语句的分析非常重要:   

    请注意

    name[1]其实也可以看成是一个‘变量’,只不过这个变量是属于name所指向的列表的一部分,它原先是指向“beijing”这个字符串,

    现在经过第三条语句后,变量name[1]就改变了指向,指向了“tianjing"这个字符串了;这样也恰好改变了列表中的内容。

    再加上最终name与name2还是指向最初的那个列表(只不过这个列表‘更新’了),

    所以现在问题不就解决了!!!

 

 

    如果您发现以上信息有问题,请及时留言,谢谢!

 

  

 

おすすめ

転載: www.cnblogs.com/ReturnOfTheKing/p/11299977.html