Python資源共享群:484031800
首先讓我們來看一個簡單的C程序:
1 a = 8;
2 b = a;
3 b = 6;
4 printf("a = %d, b = %d\\n", a, b);
View Code
相信只要學過C語言, 不用運行程序便能知道程序將會打印出a = 8, b = 6.
現在讓我們來看一看這個程序的python版本
1 a = 8
2 b = a
3 b = 6
4 print(a, b)
View Code
讓我們來看一看運行結果:
Python資源共享群:484031800
首先讓我們來看一個簡單的C程序:
1 a = 8;
2 b = a;
3 b = 6;
4 printf("a = %d, b = %d\\n", a, b);
View Code
相信只要學過C語言, 不用運行程序便能知道程序將會打印出a = 8, b = 6.
現在讓我們來看一看這個程序的python版本
1 a = 8
2 b = a
3 b = 6
4 print(a, b)
View Code
讓我們來看一看運行結果:
似乎一切都正常。
不,要是真的是那麼簡單,那要我幹嘛!!!
看,程序又來了。。。
1 name = ['fujian', 'beijing', 'shanghai']
2 name2 = name
3 name2[1] = 'tainjing'
4 print(name)
5 print(name2)
python程序
結果是不是還是我們所想的那樣:
['fujian', 'beijing', 'shanghai']
['fujian', 'tainjing', 'shanghai']
可現實是:
Python資源共享群:484031800
首先讓我們來看一個簡單的C程序:
1 a = 8;
2 b = a;
3 b = 6;
4 printf("a = %d, b = %d\\n", a, b);
View Code
相信只要學過C語言, 不用運行程序便能知道程序將會打印出a = 8, b = 6.
現在讓我們來看一看這個程序的python版本
1 a = 8
2 b = a
3 b = 6
4 print(a, b)
View Code
讓我們來看一看運行結果:
似乎一切都正常。
不,要是真的是那麼簡單,那要我幹嘛!!!
看,程序又來了。。。
1 name = ['fujian', 'beijing', 'shanghai']
2 name2 = name
3 name2[1] = 'tainjing'
4 print(name)
5 print(name2)
python程序
結果是不是還是我們所想的那樣:
['fujian', 'beijing', 'shanghai']
['fujian', 'tainjing', 'shanghai']
可現實是:
Why!Why!Why!
原因如下:
1. c語言中的變量好比一個盒子,a = 8就好比將8這個數據放入了這個名為a的盒子中;而python在這一方面與C語言可算是天壤之別;
python中的變量有點類似C語言中指針, a = 8在python中就好比a 指向了8這個數據.
2. python中的每一次賦值都是將變量指向一個新的的數據(位置)
現在我們在回過頭來看一看這兩個python程序,
一:
a = 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還是指向最初的那個列表(只不過這個列表‘更新’了),
所以現在問題不就解決了!!!