'Python中的賦值操作與C語言中的賦值操作中的巨大差別'

Python C語言 編程python新視野 2019-08-07
"

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

讓我們來看一看運行結果:

Python中的賦值操作與C語言中的賦值操作中的巨大差別

似乎一切都正常。

不,要是真的是那麼簡單,那要我幹嘛!!!

看,程序又來了。。。

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

讓我們來看一看運行結果:

Python中的賦值操作與C語言中的賦值操作中的巨大差別

似乎一切都正常。

不,要是真的是那麼簡單,那要我幹嘛!!!

看,程序又來了。。。

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中的賦值操作與C語言中的賦值操作中的巨大差別

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還是指向最初的那個列表(只不過這個列表‘更新’了),

所以現在問題不就解決了!!!

"

相關推薦

推薦中...