一、变量赋值


在Python可变数据类型(列表,字典,集合)中,把一个可变数据类型的变量赋给另一个变量,这两个变量引用的是同一个对象,内存地址是一样的,修改当中的一个变量,另一个变量相应也会被修改

>>> a = [1,2,3,4,5]
>>> b = a
>>> id(a)
2846410718600 # 变量a的内存地址
>>> id(b)
2846410718600 # 变量b的内存地址
>>> a[0]=0
>>> a
[0, 2, 3, 4, 5]
>>> b
[0, 2, 3, 4, 5]

二、浅拷贝


拷贝了一个对象的顶层,只拷贝了对象的"引用"

>>> a = [[1,2,3],4,5]
>>> b = a.copy()
>>> a
[[1, 2, 3], 4, 5]
>>> b
[[1, 2, 3], 4, 5]
>>> id(a) # 变量a的内存地址
2846410784136
>>> id(b) # 变量b的内存地址
2846410717512
>>> id(a[0]) # 变量a中第一个元素的内存地址
2846410718152
>>> id(b[0])
2846410718152 # 变量b中第一个元素的内存地址

修改对象中的不可变类型数据,另一个变量不受影响;修改对象中的可变类型子数据,另一个变量相应改变

>>> a = [[1,2,3],4,5]
>>> b = a.copy()
>>> a[1] = 6 # 修改的为不可变数据类型
>>> a
[[1, 2, 3], 6, 5]
>>> b
[[1, 2, 3], 4, 5]
>>> a[0][1]=0 # 修改的为可变(列表中的数据)数据类型
>>> a
[[1, 0, 3], 6, 5]
>>> b
[[1, 0, 3], 4, 5]

三、深拷贝


对对象中的每一层都进行了拷贝,拷贝后的对象与原对象为完全独立,没有任何关系。

>>> from copy import deepcopy
>>> a = [[1,2,3],4,5]
>>> b = deepcopy(a)
>>> a
[[1, 2, 3], 4, 5]
>>> b
[[1, 2, 3], 4, 5]
>>> id(a)
2846410715976
>>> id(b)
2846410515720
>>> id(a[0])
2846410717896
>>> id(b[0])
2846410718856

即使修改当中一个变量的可变类型子数据,另一个变量也不会受影响

>>> from copy import deepcopy
>>> a = [[1,2,3],4,5]
>>> b = deepcopy(a)
>>> a
[[1, 2, 3], 4, 5]
>>> b
[[1, 2, 3], 4, 5]
>>> a[0][1]=0
>>> a
[[1, 0, 3], 4, 5]
>>> b
[[1, 2, 3], 4, 5]

Python3学习笔记(九):赋值,浅拷贝和深拷贝区别的更多相关文章

  1. python3学习笔记九(if语句)

    # !/usr/bin/python3 斐波那数列,两个元素的总和确定下一个数a,b = 0,1while b < 1000: print(b,end=',') a, b = b, a+bpri ...

  2. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  3. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  4. Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

    Python3学习笔记(urllib模块的使用)   1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,  ...

  5. Python3学习笔记 - 准备环境

    前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...

  6. 多线程学习笔记九之ThreadLocal

    目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...

  7. python3学习笔记(7)_listComprehensions-列表生成式

    #python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...

  8. python3学习笔记(6)_iteration

    #python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...

  9. python3学习笔记(5)_slice

    #python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...

  10. MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九

    <Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次   SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...

随机推荐

  1. NameNode格式化后HBase创建新表提示旧表已存在:table already exists

    1.问题出现: 在格式化NameNode后,集群上安装的OpenTSDB的表(存在hbase中)都没有了,重新运行OpenTSDB预创建表步骤报错显示table already exists 2.原因 ...

  2. C++中的类型识别

    1,为什么会提出类型识别概念呢? 1,为什么在 C 语言中没有提出这个概念呢,就是因为在 C++ 中引入了面向对象的特性,面向对象里面有一个非常重要的原则就是赋值兼容性原则: 2,在面向对象中可能出现 ...

  3. 生成url的二维码图片

    <?php require_once "./phpqrcode.php"; //生成二维码 $img = \QRcode::png("https://www.bai ...

  4. HBASE学习笔记(四)

    这两天把要前几天的知识点回顾一下,接下来我会用自己对知识点的理解来写一些东西 一.知识点回顾 1.hbase集群启动:$>start-hbase.sh ===>hbase-daemon.s ...

  5. Flask开发系列之模板

    Flask开发系列之模板 本文对<FlaskWeb开发:基于python的Web应用开发实战>模板一节做的总结. Jinja2模板引擎 模板 模板是一个包含响应文本的文件,其中包含用占位变 ...

  6. Linux往log中写日志

    void writelog(const char* log) { time_t tDate; struct tm* eventTime; time(&tDate);//得到系统当前时间 //将 ...

  7. centos--软件源--本地软件源---离线安装

    一.软件源配置文件 1./etc/yum.conf 配置文件 [main] cachedir=/var/cache/yum #yum下载的RPM包的缓存目录 keepcache= #缓存是否保存,1保 ...

  8. suse清除kthrotlds木马病毒

    一.服务器感染了kthrotlds挖矿病毒 [root@51yt bin]# cd /bin/ [root@51yt bin]# wget https://busybox.net/downloads/ ...

  9. 转(HBuilder 打包流程)

    1.运行HBuilder---百度搜索HBuilder,官网下载安装包,解压,运行HBuilder.exe.注册账号,并登陆 2.新建app---在左边右键,选择新建APP,或者,点击中间的新建app ...

  10. robotframework调用外部python多次运行拿到的都是同一个值

    外部python是一个爬虫,爬取的内容的定义没有放入函数中.导致一次爬取多次使用的情况出现. 第一版函数如下: 改版后: