当前位置: 首页 > news >正文

数组的初始化以及拷贝

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)

相关文章:

  • 使用GoogleNet网络实现花朵分类
  • 在Kubernetes(k8s)上部署整个SpringCloud微服务应用
  • Java IO流
  • 从零开始搭建第一个django项目
  • 使用序列化技术保存数据 改进 IO流完成项目实战水果库存系统
  • Kotlin中的内联函数:提升性能与解决Lambda表达式参数问题
  • 模拟器-雷电-使用adb push或adb pull操作文件
  • Android Studio初学者实例:RecyclerView学习--模仿今日头条--续
  • 向量检索库Milvus架构及数据处理流程
  • 如何系统 如何进行SQL监控-执行SQL分析打印
  • 【每日一练】20231023
  • 紫光同创FPGA实现PCIE测速试验,提供PDS工程和Linux QT上位机源码和技术支持
  • 报错:The supplied javaHome seems to be invalid. I cannot find the java executable
  • 如何开发一个 Safari 插件
  • flutter开发的一个小小小问题,内网依赖下不来
  • RemObjects Elements 12.0 Crack
  • 【safetensor】Debug
  • 智慧河湖方案:AI赋能水利水务,构建河湖智能可视化监管大数据平台
  • 【Gensim概念】03/3 NLP玩转 word2vec
  • pdf导出实例(itestpdf)
  • 金砖国家外长会晤落幕,外交部:发出了反对单边霸凌行径的“金砖声音”
  • 神舟十九号载人飞行任务取得圆满成功
  • 国家能源局通报上月投诉情况:赤峰有群众反映电费异常增高,已退费
  • 中办、国办印发《安全生产考核巡查办法》
  • 卡尼领导的加拿大自由党在联邦众议院选举中获胜
  • 全球前瞻|王毅赴巴西出席金砖外长会,加拿大迎来“几十年来最重要大选”