数组的初始化以及拷贝

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] = 100
    print(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] = 8

    print(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] * length
    return 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] * length
    return arr
# 初始化一个row行, column列的二维数组
def createTwoArr(row, column):
    arr = [[0] * column for _ in range(row)]    # 注意行列的顺序
    # arr = [[0] * column] * row  # 这种是错误的  这种初始化相当于是每行都相同
    return arr

if __name__ == '__main__':
    # 矩阵初始化
    one = createOneArr(5)
    two = createTwoArr(4, 5)
    print(one)
    print(two)
    two[0][0] = 1
    print(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] = 100
    print(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] = 8

    print(f"浅拷贝: {new_arr_shallow}")
    print(f"深拷贝: {new_arr_deep}")
    print(f"深拷贝: {new_arr_deep2}")
# 初始化一个length的数组
def createOneArr(length):
    arr = [0] * length
    return arr
# 初始化一个row行, column列的二维数组
def createTwoArr(row, column):
    arr = [[0] * column for _ in range(row)]    # 注意行列的顺序
    # arr = [[0] * column] * row  # 这种是错误的  这种初始化相当于是每行都相同
    return arr

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)     # 二维数组拷贝
    # 矩阵初始化
    one = createOneArr(5)
    two = createTwoArr(4, 5)
    print(one)
    print(two)
    two[0][0] = 1
    print(two)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值