1.  
  1. import copy
  2.  
  3. names = ['Amir', 'Barry', 'Cgakes', 'Dao', [11, 22, 33]]
  4.  
  5. # 直接赋值,指向同一个内存地址
    names1 = names
  6.  
  7. # 浅拷贝:重新分配一块内存,创建一个新的对象,里面的元素是指原对象中子对象的引用
    names2 = list(names)# 数据类型本身的构造器
    names3 = names1[:] # 切片
    names4 = copy.copy(names)
  8.  
  9. # 深拷贝:递归地拷贝原对象中的每一个子对象
    names5 = copy.deepcopy(names)
    names1[0] = 'haha'
    names1[-1][0] = 44
  10.  
  11. print(names1)
    print(names2)
    print(names3)
    print(names4)
    print(names5)
  12.  
  13. # 输出
    """
    ['haha', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象和子对象都指向同一个内存地址
    ['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
    ['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
    ['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
    ['Amir', 'Barry', 'Cgakes', 'Dao', [11, 22, 33]]#父对象和子对象都是独立的
    """
  1.  
  1. 总结:
    赋值就是系统先给一个对象分配了内存地址,然后再将内存地址指向另一个对象,如a=b
    浅拷贝是父对象独立,但是子对象指向同一个内存地址
      通常用数据类型本身的构造器如list(),set()
      python提供的函数copy.copy()可以适用于任何数据类型
      对于可变序列,可以通过切片操作符':'来完成浅拷贝
    深拷贝是和原来的父子对象完全独立,父对象和子对象都指向完全不同的内存地址,copy.deepcopy()
    相同值的可变类型的内存地址是不一样的,但是修改时不需要开辟一块新的空间,只需修改原内存地址就行了
    相同值的不可变类型的内存地址是一样的

python直接赋值、浅拷贝和深拷贝的更多相关文章

  1. 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

    引用:https://www.jb51.net/article/142775.htm 列表赋值: 1 2 3 4 5 6 7 >>> a = [1, 2, 3] >>&g ...

  2. 16.python中的浅拷贝和深拷贝

    在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b

  3. Python 引用、浅拷贝、深拷贝解析

    引用 Python是动态数据类型的语言,故在对变量进行赋值时是不用制定变量类型的. 或者说,你可以把变量赋值的过程,当作是贴一个标签,去引用该数据. 看下面的例子: In [54]: a=4 In [ ...

  4. python 基础之浅拷贝与深拷贝

    浅拷贝与深拷贝 1.普通赋值 例1: a = 15b = aa = 16print(b)#例2:lst1 = [1,2,3]lst2 = lst1lst1.append(4)print(lst2)#这 ...

  5. python 进阶篇 浅拷贝与深拷贝

    阐述引用.浅拷贝和深拷贝前,首先需要要了解 Python 的世界里,一切皆对象,每个对象各包含一个 idendity.type 和 value. 引用(Reference) >>> ...

  6. python中的浅拷贝,深拷贝

    直接引用,间接引用 # 1.列表存储的是索引对应值的内存地址,值会单独的开辟一个内存空间 list = ["a","b"] 内存里面存储的就是list[0],l ...

  7. python中赋值-浅拷贝-深拷贝之间的关系

    赋值: 变量的引用,没有拷贝空间 对象之间赋值本质上 是对象之间的引用传递而已.也就是多个对象指向同一个数据空间. 拷贝的对象分两种类型: . 拷贝可变类型 浅拷贝: 只拷贝第一层数据,不关心里面的第 ...

  8. python中的浅拷贝和深拷贝

    1.赋值语句 a = 'abc' b = a print id(a) print id(b) # id(a):29283464 # id(b):29283464 通过简单的复制,我们可以看到,a b其 ...

  9. Python核心编程--浅拷贝与深拷贝

    一.问题引出浅拷贝 首先看下面代码的执行情况: a = [1, 2, 3] print('a = %s' % a) # a = [1, 2, 3] b = a print('b = %s' % b) ...

  10. Python中的浅拷贝与深拷贝

    编者注:本文主要参考了<Python核心编程(第二版)> 以下都是参考资料后,我自己的理解,如有错误希望大家不吝赐教. 大家有没有遇到这样一种情况,对象赋值后,对其中一个变量进行修改,另外 ...

随机推荐

  1. 设置RabbitMQ远程ip登录

    由于账号guest具有所有的操作权限,并且又是默认账号,出于安全因素的考虑,guest用户只能通过localhost登陆使用,并建议修改guest用户的密码以及新建其他账号管理使用rabbitmq. ...

  2. java (10) 集合类

    1.集合概述 集合按照存储结构可以分为两类,即单列集合 Collection 和双列集合 Map. * Collection 用于存储一系列符合某种规则的元素,它有两个重要的自接口,分别是List和S ...

  3. 报错--"npm audit fix" or "npm audit"

    如图: 根据提示输入 npm audit fix --force 如图: 根据提示输入: npm audit

  4. Mysql语句优化

    总结总结自己犯过的错,网上说的与自己的Mysql语句优化的想法. 1.查询数据库的语句的字段,尽量做到用多少写多少. 2.建索引,确保查询速度. 3.orm框架自带的方法会损耗一部分性能,这个性能应该 ...

  5. locate命令的使用

    使用locate命令,遇到了这样的情况:当前目录下有一个文件,而使用这个命令时却查找不到这个文件,上网查了一下,找到了原因,就在下面. 1. find find是最常见和最强大的查找命令,你可以用它找 ...

  6. [工具] Sublime Text 使用指南

    http://bbs.it-home.org/thread-46291-1-1.html 摘要(Abstract) 更新记录 更正打开控制台的快捷键为Ctrl + ` 更正全局替换的快捷键为Ctrl ...

  7. svn和git的优缺点

    git官网api: https://git-scm.com/docs 一. 集中式vs分布式 1. Subversion属于集中式的版本控制系统集中式的版本控制系统都有一个单一的集中管理的服务器,保存 ...

  8. Java 制作证书(Windows 和Linux)

    一.Windows数字证书 1. 生成数字证书 1.1 进入[%JAVA_HOME%]路径下 cd D:\Program Files\Java\jdk1.8.0_131 1.2 生成证书.一些命令中红 ...

  9. Linux下 磁盘扩容的两种方式

    Hadoop扩容 概述 Hadoop存储容量或计算能力不能满足日益增长的需求时,就需要扩容. 扩容有两个方案: 1) 增加磁盘 2) 增加节点 方案一:扩大虚拟磁盘 扩大容量 将虚拟的Linux关闭, ...

  10. nginx的一些基本功能

    1.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片)通过HTTP协议展现给客户端. 配置:[plain] view plain copy serv ...