下面說一說其中碰到的問題,首先便是這裡剛開始搞不清楚是傳引用還是傳對象.(我不知道這樣說是否合理,但是按照c++的角度來看待我覺得會簡單一點),我在航空公司那個類中有關於航班的列表,那麼如果我把某個航班對象append到這個列表中時,如果以後那個航班對象發生了改變,那麼相應的公司列表中的那個會不會發生改變呢?同樣的疑問也出現在了航班對象中的seat列表以及customer的seat列表.後來簡單的實驗了一下,發現是會改變的,這就是傳引用.實際上在簡明python中這樣說到:
當你建立一個對象並給它賦一個變數的時候,這個變數僅僅 參考 那個對象,而不是表示這個對象本身!也就是說,變數名指向你電腦中儲存那個對象的記憶體。這被稱作名稱到對象的綁定。
其實數組中存放的也是那個對象的地址,我想這和java中的是一樣的,除了基礎資料型別 (Elementary Data Type).比如:
a = 0
b = a
a =9
這個時候a為多少b為多少呢?b會不會隨著a的變化而變化呢?答案是不會
再如:
a = 'a'
b= a
a = 'b'
但是如果這樣寫:
class A:
def __init__(self):
self.name = ''
a = A()
b = a
a.name = "nihao"
print b.name
結果為nihao
這說明非基本類型都是傳的引用.再比如這樣一個程式,
fun(a):
a = 0
a = 9
fun(a)
print a
答案還是9這說明python在這方面和java是一至的
第二個問題,是代碼結構問題,我將他抽象為下面這種形式:
class A:
def __init__(self,mlist = []):
self.mylist = mlist
class B:
def __init__(self):
self.P = None
def setList(self,a):
self.P = a
a.mylist.append(self)
a1 = A()
a2 = A()
b1 = B()
b2 = B()
b1.setList(a1)
b2.setList(a1)
print a1.mylist
print a2.mylist
列印的結果會使我大吃一驚.....至今沒想通為什麼.........想看的話可以自己運行一下.......知道的一定要評論告訴我阿大神們!!!!!跪了!!!!