一:深拷貝與淺拷貝:
1..a 與a[:]
a[:] 是深復制 ,在python的賦值中,是通過對象的地址引用進行的賦值,a[:]修改的是堆中的內容,意思是指針還指向這里;而a是淺復制,修改a就新開辟了一個地址空間:
如下圖:

2.b = a && b = a[:] or b = a.copy()的區別;
b=a將兩者指向同一個對象; b = a[:]/a.copy()都屬於“淺拷貝”,只拷貝最外層元素,內層嵌套元素則通過引用,而不是獨立分配內存。

>>> a = [1,2,['A','B']] >>> b = a >>> b[0]=9 >>> b[2][0]='d' >>> a [9, 2, ['d', 'B']] >>> c = a[:] >>> c[0] = 22 >>> c[2][0] = 'l' >>> a [9, 2, ['l', 'B']] >>> b [9, 2, ['l', 'B']] >>> c [22, 2, ['l', 'B']]
二.數組切片
切片操作基本表達式:object[start_index:end_index:step]
start_index, end_index, step >>>+/-
start_index、end_index、step可同為正、同為負,也可正負混合使用。但必須遵循一個原則,否則無法正確切取到數據:當start_index的位置在end_index的左邊時,表示從左往右取值,此時step必須是正數(同樣表示從左往右);當start_index的位置在end_index的右邊時,表示從右往左取值,此時step必須是負數(同樣表示從右往左),即兩者的取值順序必須是相同的。對於特殊情況,當start_index或end_index省略時,起始索引和終止索引由step的正負來決定,不會存在取值方向出現矛盾的情況(即不會返回空列表[]),但正和負取到的結果是完全不同的,因為一個向左一個向右。
