数组的初始化以及拷贝

编程入门 行业动态 更新时间:2024-10-21 23:25:29

<a href=https://www.elefans.com/category/jswz/34/1771288.html style=数组的初始化以及拷贝"/>

数组的初始化以及拷贝

1. 数组拷贝

浅拷贝(Shallow Copy):

  • 浅拷贝创建一个新的对象,但不会复制原始对象中的子对象。
  • 原始对象和浅拷贝后的对象共享相同的子对象。这意味着,如果修改了浅拷贝后的对象中的子对象,原始对象中的相应子对象也会受到影响。
  • 浅拷贝通常使用一些语言提供的内建函数(如copy.copy()在Python中)来执行。

深拷贝(Deep Copy):

  • 深拷贝创建一个新的对象,并且递归地复制原始对象中的子对象。这意味着原始对象和深拷贝后的对象是完全独立的,对其中一个的修改不会影响另一个。
  • 深拷贝通常需要使用专门设计用于深拷贝的函数或库(如copy.deepcopy()在Python中)。

使用场景: 备份, 或者是回溯题目的时候需要深拷贝数组, 如果是浅拷贝的化那么将会为[]数组

# 推荐深拷贝 [row[:] for row in arr]
def twoDimensinalArrCopy(arr):new_arr_shallow1 = arr           # 浅拷贝 直接赋值new_arr_shallow2 = arr[:][:]     # 浅拷贝 [:][:]new_arr_shallow3 = arr.copy()    # 浅拷贝 .copy()new_arr_deep1 = [row[:] for row in arr]  # 深拷贝arr[0][0] = 100print(new_arr_shallow1)print(new_arr_shallow2)print(new_arr_shallow3)print(new_arr_deep1)
# 推荐深拷贝 arr[:]
def oneDimensionalArrCopy(arr):new_arr_shallow = arr        # 一维数组浅拷贝new_arr_deep = arr[:]        # 一维数组深拷贝new_arr_deep2 = arr.copy()   # 一维数组深拷贝arr[0] = 8print(f"浅拷贝: {new_arr_shallow}")print(f"深拷贝: {new_arr_deep}")print(f"深拷贝: {new_arr_deep2}")
if __name__ == '__main__':arr_one = [1, 2, 3, 4, 5, 6, 7]arr_two = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# oneDimensionalArrCopy(arr_one)    # 一维数组拷贝# twoDimensinalArrCopy(arr_two)     # 二维数组拷贝

2. 数组的初始化

2.1 初始一维数组直接

def createOneArr(length):arr = [0] * lengthreturn arr

2.2 初始化二维数组

这里需要注意要使用一个for循环,不然会有问题 可以自行测试

def createTwoArr(row, column):arr = [[0] * column for _ in range(row)]    # 注意行列的顺序# arr = [[0] * column] * row  # 这种是错误的  这种初始化相当于是每行都相同return arr
def createOneArr(length):arr = [0] * lengthreturn arr
# 初始化一个row行, column列的二维数组
def createTwoArr(row, column):arr = [[0] * column for _ in range(row)]    # 注意行列的顺序# arr = [[0] * column] * row  # 这种是错误的  这种初始化相当于是每行都相同return arrif __name__ == '__main__':# 矩阵初始化one = createOneArr(5)two = createTwoArr(4, 5)print(one)print(two)two[0][0] = 1print(two)

3. 总的代码

# 推荐深拷贝 [row[:] for row in arr]
def twoDimensinalArrCopy(arr):new_arr_shallow1 = arr           # 浅拷贝 直接赋值new_arr_shallow2 = arr[:][:]     # 浅拷贝 [:][:]new_arr_shallow3 = arr.copy()    # 浅拷贝 .copy()new_arr_deep1 = [row[:] for row in arr]  # 深拷贝arr[0][0] = 100print(new_arr_shallow1)print(new_arr_shallow2)print(new_arr_shallow3)print(new_arr_deep1)
# 推荐深拷贝 arr[:]
def oneDimensionalArrCopy(arr):new_arr_shallow = arr        # 一维数组浅拷贝new_arr_deep = arr[:]        # 一维数组深拷贝new_arr_deep2 = arr.copy()   # 一维数组深拷贝arr[0] = 8print(f"浅拷贝: {new_arr_shallow}")print(f"深拷贝: {new_arr_deep}")print(f"深拷贝: {new_arr_deep2}")
# 初始化一个length的数组
def createOneArr(length):arr = [0] * lengthreturn arr
# 初始化一个row行, column列的二维数组
def createTwoArr(row, column):arr = [[0] * column for _ in range(row)]    # 注意行列的顺序# arr = [[0] * column] * row  # 这种是错误的  这种初始化相当于是每行都相同return arrif __name__ == '__main__':arr_one = [1, 2, 3, 4, 5, 6, 7]arr_two = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# oneDimensionalArrCopy(arr_one)    # 一维数组拷贝# twoDimensinalArrCopy(arr_two)     # 二维数组拷贝# 矩阵初始化one = createOneArr(5)two = createTwoArr(4, 5)print(one)print(two)two[0][0] = 1print(two)

更多推荐

数组的初始化以及拷贝

本文发布于:2023-12-04 12:16:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1660882.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   初始化

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!