numpy的深淺拷貝與python list的深淺拷貝

numpy中array數(shù)據(jù)類型的轉(zhuǎn)置(transpose)

arr=np.arange(16).reshape(2,2,4)
arr2=arr.copy() #深拷貝
print(arr)
arr3=arr.transpose((1,0,2)) #arr.transposse并不會改變arr本身的值,返回值是變了的
print(arr3)

arr4=arr2.swapaxes(0,1) #同arr2.transpose(1,0,2)。并且也不改變arr2的值。返回新的值方便連起來
print(arr2)
print(arr4)

numpy array的深淺拷貝 & python list的深淺拷貝

  1. python list


  • list2=list1 是賦值操作,不是拷貝。兩個是同一個對象的引用。故而同變化
  • list2=list1.copy()是淺拷貝,相當(dāng)于list2引用一個新對象,然后把list1中的值拷貝到這個新對象中。但是如果list1=[1,[1,2],3]包含嵌套,嵌套第一層拷貝過去的是值,第二層保存的實際是地址,所以拷貝過去的也是地址,這樣修改list2[1][0]=3的話,實際上list1的相應(yīng)的值也會發(fā)生改變。
  • 使用列表推導(dǎo)式list2=[i for i in list1]同list1.copy(),相當(dāng)于第一層是深拷貝,內(nèi)層由于保存的是地址,屬于淺拷貝。
  • 使用for循環(huán),逐個將list1中元素append到list2中,同列表推導(dǎo)式
  • 使用切片list2=list1[1:]雖然也是生成新的list,但是同樣對內(nèi)層是淺拷貝。
  • list2=copy.deepcopy(list1)真正深拷貝
  1. numpy array


    在這里插入圖片描述

    數(shù)組切片是原始數(shù)組的視圖,這意味著數(shù)據(jù)不會被復(fù)制,視圖上的任何修改都會被直接反映到源數(shù)組上.
    array1,array2,array3,array4實際指向同一個內(nèi)存值,任意修改其中的一個變量,其他變量值都會被修改。
    若想要得到的是ndarray切片的一份副本而非視圖,就需要顯式的進行復(fù)制操作函數(shù)copy()
    array5=array1.copy() #對原始的array1的復(fù)制
    array6=array1[1:4].copy() #對切片array1[1:4]的復(fù)制
    那么,修改array5或array6,就不會影響array1。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基礎(chǔ)篇NumPy的主要對象是同種元素的多維數(shù)組。這是一個所有的元素都是一種類型、通過一個正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,290評論 0 18
  • 一、numpy概述 numpy(Numerical Python)提供了python對多維數(shù)組對象的支持:ndar...
    L_steven的貓閱讀 3,611評論 1 24
  • 先決條件 在閱讀這個教程之前,你多少需要知道點python。如果你想從新回憶下,請看看Python Tutoria...
    舒map閱讀 2,730評論 1 13
  • NumPy是Python中關(guān)于科學(xué)計算的一個類庫,在這里簡單介紹一下。 來源:https://docs.scipy...
    灰太狼_black閱讀 1,331評論 0 5
  • 不知道從什么時候開始,已經(jīng)漸漸的開始成長了。如果說青春是夢,那成長便是刀。 一 人生是滄海桑田,我們不過是一片葉,...
    妝梔閱讀 325評論 0 0

友情鏈接更多精彩內(nèi)容