網站首頁 編程語言 正文
讓我們看看如何在 Python 中復制數組。 有 3 種復制數組的方法:
- 只需使用賦值運算符。
- 淺拷貝
- 深拷貝
1 使用賦值運算符
我們可以使用賦值運算符 (=) 創建數組的副本。
語法:
new_arr = old_ arr
在 Python 中,Assignment
語句不復制對象,它們在目標和對象之間創建綁定。 當我們使用 = 運算符時,用戶認為這會創建一個新對象; 好吧,事實并非如此。 它只創建一個共享原始對象引用的新變量。
示例:
from numpy import *?????????????????? ? arr1 = array([2, 6, 9, 4])???????????? ? print(id(arr1)) ? arr2 = arr1????????????????????????? ? print(id(arr2)) ? arr1[1] = 7???????????????????????? ? print(arr1) print(arr2)
我們可以看到兩個數組都引用了同一個對象。
2 淺拷貝
一個淺副本意味著構造一個新的集合對象,然后用對原始中找到的子對象的引用填充它。 復制過程不會重復,因此不會創建子對象本身的副本。 在淺拷貝的情況下,對象的引用被復制在另一個對象中。 這意味著對對象的副本所做的任何更改都會在原始對象中反映。 我們將使用視圖view()函數來實現淺副本。
示例:
from numpy import *????????????????? ?? arr1 = array([2, 6, 9, 4]) ? print(id(arr1)) ? arr2 = arr1.view()? ? print(id(arr2)) ?? arr1[1] = 7??????????????????????? ?? print(arr1) print(arr2)
這次雖然2個數組引用了不同的對象,但在更改一個數組值的時候,另一個的值也被更改。
3 深度拷貝
深度拷貝是一個過程,其中復制過程遞歸地發生。 它意味著首先構建一個新的存儲對象,然后用原稿中找到的子對象的副本遞歸地填充它。 在深度拷貝的情況下,將對象的副本復制到另一個對象中。 這意味著對對象的副本所做的任何更改都不反映在原始對象中。 我們將使用copy()函數來實現深度副本。
示例:
from numpy import *????????????????? ?? arr1 = array([2, 6, 9, 4]) ? print(id(arr1)) ? arr2 = arr1.copy() ? print(id(arr2)) ?? arr1[1] = 7??????????????????????? ?? print(arr1) print(arr2)
這次在一個數組中所做的更改不會映射在其他數組中。
4 深度拷貝進階
如果您正在處理numpy矩陣,則numpy.copy()將為您提供深度拷貝。 但是,如果您的矩陣是列表的列表,那么請考慮旋轉圖像90度的任務中使用以下方法:
示例:
import copy ? def rotate_matrix(image): ????copy_image_one = copy.deepcopy(image) ????print("Original", matrix) ????print("Copy of original", copy_image_one) ????N = len(matrix) ? ????for row in range(N): ????????for column in range(N): ????????????copy_image_one[row][column] = image[row][N-column-1] ? ????print("After modification") ????print("Original", matrix) ????print("Copy", copy_image_one) ? ????copy_image_two = [list(row) for row in copy_image_one] ? ????for row in range(N): ????????for column in range(N): ????????????copy_image_two[column][row] = copy_image_one[row][column] ? ????return copy_image_two ? ? if __name__ == "__main__": ????matrix = [[1, 2, 3], ??????????????[4, 5, 6], ??????????????[7, 8, 9]] ????print("Rotated image", rotate_matrix(matrix))
Python列表POP()是Python中的內置函數,該函數刪除并返回列表或給定索引值的最后一個值。
語法:
list_name.pop(index)
參數:
- index(可選) - 彈出并刪除索引處的值。 如果未給出索引,則會彈出并刪除最后一個元素。
返回值:列表中的最后一個值或給定的索引值。
例外:當索引超出范圍時,它會返回IndexError
。
例一:
list1 = [ 1, 2, 3, 4, 5, 6 ] ? print(list1.pop()) ? print("New List after pop : ", list1, "\n") ? list2 = [1, 2, 3, ('cat', 'bat'), 4] ? print(list2.pop()) print(list2.pop()) print(list2.pop()) ? print("New List after pop : ", list2, "\n")
例二:
list1 = [ 1, 2, 3, 4, 5, 6 ] ? print(list1.pop(), list1) print(list1.pop(0), list1)
例三:
list1 = [ 1, 2, 3, 4, 5, 6 ] print(list1.pop(8))
例四:
fruit = [['Orange','Fruit'],['Banana','Fruit'], ['Mango', 'Fruit']] consume = ['Juice', 'Eat'] possible = [] for item in fruit : ????for use in consume : ????????? ????????item.append(use) ????????possible.append(item[:]) ????????item.pop(-1) print(possible)
原文鏈接:https://blog.51cto.com/u_14857544/5177095
相關推薦
- 2022-04-28 sql?server?累計求和實現代碼_MsSql
- 2022-10-22 Kotlin匿名函數使用介紹_Android
- 2022-12-26 C++內存分區模型超詳細講解_C 語言
- 2024-01-09 使用<scope>import</scope>解決Maven項目單繼承問題
- 2022-12-12 python?使用?with?open()?as?讀寫文件的操作方法_python
- 2022-11-15 Django?使用VScode?創建工程的詳細步驟_python
- 2022-12-11 C語言執行時,程序控制臺輸出窗口?一閃而過問題及解決_C 語言
- 2023-01-29 Python?find()、rfind()方法及作用_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支