python學習過程中的一些隨筆,用於整理一些瑣碎但可能引發一些bug的知識點
一、數組
1.1 在編程中,對於兩個變量進行數值交換常採用的形式爲如下:
a=1,b=2,temp=b,b=a,a=temp
在python中可以將其簡化爲
a,b=b,a
但要注意對於數組,可能造成結果錯誤,如對於下面的程序
a=[1,2,3]
a[0],a[a[0]]=a[a[0]],a[0]
你期望得到的結果過是1,2兩個元素進行換位,但是最終的結果是a=[2,2,1]
原因在於當a[0]=a[1]=2被執行後,第一個逗號後得到的結果爲a[2]而非a[1],因而引發錯誤。
1.2 對於數組如果切片超出索引,那麼返回值爲一個空列表
a=[1,2,3]
print(a[3:])
>>>>>>[]
1.3 數組的深複製與淺複製
a=[[1]*10]*10
a[1][2]=100
print(a)
對於這樣一個數組,預期目標是隻修改第二行第三個數爲100,但實際得到的結果是所有行的第三個數變成了100,原因設計數組的深複製與淺複製的關係。這裏借用博文——圖解python深拷貝與淺拷貝說明如下:
對於python列表的乘法而言,如果列表中的元素爲不可變類型,如數字,字符串等,那麼複製能夠正常進行,如:
a=[1]*3
>>>[1,1,1]
但,當列表中的元素爲引用類型時,那麼列表複製執行的爲引用(見上文中的說明),當對其中元素進行修改時,會對所有的元素造成影響,列表內的對象爲字典時也會出現。