转于Python中copy和deepcopy中的区别

博主assan

一、序列中的 copy() 方法

 # 此方法为浅度复制:复制的数会随着被复制数的嵌套序列的元素的改变而改变;

 # 功能:将一个列表复制给另一个列表

 # 格式:list_1 = list_2.copy(),(字典、元组一样)

  • 例一

    a = list(range(10))
    b = a.copy()
    print(b)
    # 输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 例二:更改被复制的序列
    a = list(range(10))
    b = a.copy()
    a[0] = 10
    print(a, b)
    # 输出:[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 例三:更改被复制的序列中的嵌套序列
    a = ['a', list(range(10))]
    b = a.copy()
    print(a, b)
    a[1][0] = 10
    print(a, b)
    # 输出:['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]] ['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
    ['a', [10, 1, 2, 3, 4, 5, 6, 7, 8, 9]] ['a', [10, 1, 2, 3, 4, 5, 6, 7, 8, 9]]

    # 原因:主列表(a)只是存储了嵌套列表(list(range(10)))在内存中的地址,而不是所看到的数据,copy的也只是嵌套列表的地址,但两个地址指向的是内存中同一块区域,所以在对嵌套列表进行修改时,只是通过了两个复制地址而修改了真实数据,所以两个列表的元素都被改掉了。

二、Python的 copy 模块

 1)copy 模块下的 copy()函数

  # 浅度复制,复制的数会随着被复制数的嵌套序列的元素的改变而改变

  • 功能:将一个数据复制给另一个数据;(这里的数据可以是number、序列、str)
  • 格式copy . copy(数据)
  • 操作方式及功能:与 python 序列的 copy() 的方法一样

 2)copy 模块下的 deepcopy() 函数

  # 深度复制复制的数不会随着被复制数的嵌套序列的元素的改变而改变

  • 功能:将一个数据复制给另一个数据;(这里的数据可以是number、序列、str)
  • 格式copy . deepcopy(数据)
  • 例:复制的数,不会随着被复制数的嵌套序列的元素的改变而改变

    import copy
    
    a = ['a', list(range(10))]
    b = copy.deepcopy(a)
    print(a, b)
    a[1][0] = 10
    print(a, b)
    # 输出:['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]] ['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
    ['a', [, 1, 2, 3, 4, 5, 6, 7, 8, 9]] ['a', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]

Python:序列的copy() 方法和 copy 模块的更多相关文章

  1. Python基础【第十一篇】文件操作(file()、open()方法和fileinput模块)

    一.file/open 内置函数 file函数的方法: 注:file 和 open的用法和功能相同这里只对file进行分析 file(‘filename’,’mode’) file(‘filename ...

  2. property用法,使Python中的get方法和set方法使用更简单

    方法一: class a: def __init__(self): self.__num = 1              #定义一个私有变量(以双下划线开头的是私有变量) def getNum(se ...

  3. python中的sort方法和sorted方法

    一.sort()函数 描述 sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数. 语法 sort()方法语法: 1 list.sort(cmp=None, key=No ...

  4. python多线程中join()方法和setDaemon()方法的区别

    """ join()方法:主线程A中,创建了子线程B,并且在主线程中调用了B.join()方法,那么主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行 ...

  5. python list中append()方法和extend()方法区别

    共同点 只能作用于list类型(不能作用于tuple等其他类型) 单参数限制(不支持多参数) 不同点 list.append(object) 向列表中添加一个对象object. 使用append的时候 ...

  6. python 深复制与浅复制------copy模块

    模块解读: 浅复制: x = copy.copy(y)深复制: x = copy.deepcopy(y)(注:模块特有的异常,copy.Error) 深copy与浅copy的差别主要体现在当有混合对象 ...

  7. python deep copy and shallow copy

    Python中对于对象的赋值都是引用,而不是拷贝对象(Assignment statements in Python do not copy objects, they create bindings ...

  8. Python拷贝(深拷贝deepcopy与浅拷贝copy)

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1.copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2.copy.deepco ...

  9. Py修行路 python基础 (四)运算 copy

    字符串的格式化 在字符串中插入 %s ,作为占位符,后边儿再定义插入变量. 算术运算 % 取模   判断奇偶数 / 除法   有小于号 // 取整除  返回整数部分 逻辑运算 and or not ' ...

随机推荐

  1. Java 重写equals()与hashCode()方法

    List对象的contains方法实际上也是调用的equals()方法来进行逐条对比的. 示例代码: package com.imooc.collection; /** * 课程类 */ public ...

  2. freemarker入门实例与源码研究准备工作

    首先去freemarker官网下载源码jar包,本文是基于freemarker-2.3.21.tar.gz进行研究的.解压源码包,找到freemarker的源码部分导入eclipse工程中.需要注意的 ...

  3. struts2实现文件的上传和下载实例[转]

    实现原理 Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器 ...

  4. oracle 序列改值

    1.oracle 序列改值 执行:Alter Sequence SQ_RM_FRAME Increment By 100; 执行:Select SQ_RM_FRAME.NextVal From Dua ...

  5. 常见Web安全漏洞

    1.web安全常见攻击手段     xss  sql注入  防盗链  csrf  上传漏洞 2. 信息加密与漏洞扫描   对称加密 非对称加密 3. 互联网API接口安全设计 4. 网站安全漏洞扫描与 ...

  6. easyui控件使用例子

    1.easyui之dataGrid分页加载数据例子 注意:1)分页表格通过url获得数据会提交page,rows两个参数:后台需要获取这两个参数并且由此得到 int pageSize=rows/pag ...

  7. 文件系统中跳转【TLCL】

    pwd - Print name of current working directory cd - Change directory ls - List directory contents Lin ...

  8. 移动端的坑 之 在可编辑的div中实现placeholder

    1.当我们个  div 设置了 contenteditable = "true" 这个块状元素就可以编辑了, 如果要实现 placeholder 直接写上去是没有效果的 <d ...

  9. Regular Expression Matching,regex,正则表达式匹配,利用动态规划

    问题描述:Implement regular expression matching with support for '.' and '*'. '.' Matches any single char ...

  10. review02

    位运算符 按为与运算符和按位或运算符都是二目运算符 按位非运算符是单目运算符 按位异或运算符的法则有: a^a=0; a^0=a; a^b^b=a; instanceof是二目运算符,左边的操作是一个 ...