本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正~
且看如下例子:
>>> l = [1, 2, 3]>>> ll =l
>>> ll.remove(1)
>>>l[2, 3]
>>>
>>> l = [1, 2, 3]
>>> ll =l[:]
>>> ll.remove(1)
>>>l[1, 2, 3]
>>>
是否是有點大吃一驚,跟c 語言怎麼不一樣呢?!
>>>a = [1]>>>b = a
>>>b[0] = 2
>>>a
[2]
列表是可變象對型類,因此傳遞的時候,量變名b繫結的記憶體位址與a繫結的記憶體位址是統一位址。
>>> x = 1>>> y = 1
>>> x is ytrue>>>
數值為不可變型類,x與y指向的是數值為1的統一記憶體位址。
對於類說來也是如此:
classb:x=
def
set(self):
defget(self):
return
self.x
for i in range(3):a=b()
print b.__dict__
a.set()
print a.get()
結果:
[1][1, 1]
[1, 1, 1]
python中,萬物皆象對。python中不存在所謂的傳值用調,一切傳遞的都是象對的引用,也可以認為是傳址。
python中,象對分為可變(mutable)和不可變(immutable)兩種型類。
元組(tuple)、數值型(number)、字串(string)均為不可變象對,而字典範(dictionary)和列表型(list)的象對是可變象對。
>>>a = 1 #將名字a與記憶體中值為1的記憶體繫結在一起
>>>a = 2 #
將名字a與記憶體中值為2的記憶體繫結在一起,而不是修改來原a繫結的記憶體中的值,這時,記憶體中值為1的記憶體位址引用計數-1,當引用計數為0時,記憶體位址被**
>>>b = a #
量變b執行與a繫結的記憶體
>>>b = 3 #
創立乙個記憶體值為3的記憶體位址與量變名字b行進繫結。這是a還是指向值為2的記憶體位址。
>>>a,b
>>>(2,3)
python數函引數的預設值與此的關係及例子,詳見 python tips - 意注 python 數函引數的預設值:
考參:
文章結束給大家分享下程式設計師的一些笑話語錄: 賈伯斯:怎麼樣還是咱安全吧!黑客:你的瀏覽器支援國內網銀嗎?蘋果可以玩國內的網遊嗎賈伯斯:......不可以黑客:那我研究你的漏洞幹嘛,我也需要買奶粉!
關於核與記憶體的繫結問題
2019 07 15 在現在的程式裡面,並沒有顯式的對記憶體部分進行設定。文獻 1 中提到,對於這部分的設定,包括記憶體,包括核都應該進行相應的繫結 但是如果不進行繫結,效能會下降的話,應該從什麼地方在看到這個內容。使用命令numstat並沒有看到遠端訪問的數量增加,所以這裡也是乙個疑問。基本上的意...
靜態繫結和動態繫結
c 中,非虛函式都是靜態繫結,而虛函式卻是動態繫結。為了能夠更清楚地了解靜態繫結與動態繫結,我們可以看下面這個例子 include using namespace std class b 那麼兩次呼叫fun 函式是否相同呢?當然,如果d中沒有定義fun 函式 如例子中 那麼兩次呼叫的行為肯定會是一樣...
JQuery 事件繫結,移除繫結
bind 隱式迭代,為匹配到的元素繫結相同的事件。selector bind event,func 繫結匿名函式 div p bind click function 繫結指定函式 div p bind click funcname params 繫結click事件 div p click funct...