まず、私たちは簡単な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)
その結果、我々はそれが思ったものを、まだありません:
[ '福建'、 '北京'、 '上海']
[ '福建省'、 '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还是指向最初的那个列表(只不过这个列表‘更新’了),
所以现在问题不就解决了!!!
如果您发现以上信息有问题,请及时留言,谢谢!