Python 切片與深拷貝


一:深拷貝與淺拷貝:

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的正負來決定,不會存在取值方向出現矛盾的情況(即不會返回空列表[]),但正和負取到的結果是完全不同的,因為一個向左一個向右。

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM