記憶體 繫結 python tips by小雨

2021-09-01 16:57:56 字數 1760 閱讀 3779

本文純屬個人見解,是對前面學習的總結,如有描述不正確的地方還請高手指正~

且看如下例子:

>>> 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的統一記憶體位址。

對於類說來也是如此:

class

b: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...