(此文是在實際工程中遇到的一些小問題,給予解決和整理。解決方法大多來自網上零散的文章。)
1——如下代碼,
a=[1,2,3]
b=a
b也是[1,2,3]了,接著
a[0]=4a[1]=5a[2]=6
此時a變成[4,5,6]了,再看b,a變了之后沒有對b進行新的引用,但b還是變了,自動的也變成[4,5,6]了。
除非對a進行新的賦值,比如
>>>a=[7,8,9]>>>a>>>[7,8,9]>>>b>>>[4,5,6]
這是因為列表被定義為是可變類型,相對的是不可變類型。如Python文檔所示:
1
2
3
可以看到,不可變類型只有:數字,字符串,元組。其它的類型都是可以在名字不變的情況下,對其內容進行修改,并且會影響到其他引用它的變量。
再比如:
>>>a=[1] >>>c=[] >>>c.append(a) >>>c[[1]] >>>a.append(2) >>>c[[1,2]]
1.1——父作用域屬性不會影響到子作用域。
>>> a =0>>> a = [1]>>> c =(a)>>>type(c)
list>>> c = (a, 1)>>>type(c)
tuple>>> a.append(2)>>>c
([1, 2], 1)
即元組不可變,但其內部的可變類型,如列表,可以隨時改變
2——當你需要引用一個數組的其中一部分,而此數組的長度是不確定的,導致你有可能引用的范圍超過了它的長度,可以在引用范圍中加上一個冒號:
a_list = [] #此兩行代碼是正確的,不會報錯
b_list= a_list[-1:] #比如-1后面的冒號
此時如果使用b_list=a_list[-1],程序會報錯,“IndexError: list index out of range”;再比如
a_list 的長度隨著程序的運行會變化,有可能是長3,也有可能變成5個元素,但必須保證b_list不能包含a_list的后面四個元素,
此時可以使用
b_list = a_list[:-4]
這樣,即使a_list==[1,2,3],b_list也能成功引用,結果是b_list==[] 。
3——參數前加上單星號或雙星號
4——改變對象值的方法是沒有返回值的。比如
>>list_2 =list_1.reverse()
>>print(type(list_2))>>NoneType
>>
>>list_2 =list_1.remove(n)>>print(type(list_2))>>NoneType>>
5——max函數可加入參數key,
d = {'9':1, '11':1}
max(d)>>
6--json會把字典的數字鍵改為str