1.None和[]的區別
以前以為None就是空,直到看到了下面這段代碼
list=[]
if list is None:
print "list is NULL"
else:
print "list is %s" %list
發現輸出是list is [],而不是list is NULL。這說明None和[]
不等同
。
去翻了幾篇博客后,才知道None表示的是這個對象還沒創建,而[]表示的是這個對象創建了,但是還沒有值。
“一個盒子不裝東西它還是一個盒子([]),你把盒子拆了它就是none了”
2.關于可變對象和不可變對象的理解
果然學習一門語言就要換一種方式來對待它。
看代碼:
x = 12323
y = 12323
z = 12323
print id(x)
print id(y)
print id(z)
#輸出:
50747600
50747600
50747600
#
print x is y
print y is z
#True
True#
我和伙伴們都驚呆了。。
python里的對象分為可變對象和不可變對象(python萬物皆對象)。
-
不可變對象有:int、字符串(string)、float、(數值型number)、元組(tuple)。
可變對象有:字典型(dictionary)、列表型(list)。我對不可變對象的理解就是給這個對象賦值之后,對象的值就不可以更改了,如果想改變對象的值,它會另外創造一個對象,把值賦給這個新對象,然后把變量名與之綁定。
看圖:
不可變對象的優點:
減少了相同值對內存的占用。
缺點:我要修改這個變量綁定的值,如果內存中沒用存在該值的內存塊,那么必須重新開辟一塊內存,把新地址與變量名綁定。而不是修改變量原來指向的內存塊的值,這回給執行效率帶來一定的降低。 -
我們來看兩個函數:
def f(a, L = []):
L.append(a)
print id(L)
return L
print f(1)
print f(2)
print f(3)
#
[1]
[1, 2]
[1, 2, 3]
#
def f(a, L = None):
if(L is None):
L = []
L.append(a)
return L
print f(1)
print f(2)
print f(3)
#
[1]
[2]
[3]
#
第一個代碼的輸出,是因為L是可變對象,它被創建了之后,第二次調用的時候,我們發現,L存在,所有就不會重新創建(沒有執行L=[]),所以會在原來的基礎上放進去一個2.
第二個代碼的輸出,是因為每次L都被置為None了。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
