一、变量赋值


在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. [官网]关于EPEL

    EPEL/zh-cn https://fedoraproject.org/wiki/EPEL/zh-cn Contents [hide]  1企业版 Linux 附加软件包(EPEL) 1.1什么是企 ...

  2. hashlib模块和hmac模块

    hashlib模块和hmac模块 hashlib模块 一.导入方式 import hashlib 二.作用 无论你丢什么字符串,他都会返回一串 固定长度的字符串 三.模块功能 3.1 经常使用 imp ...

  3. Deepin安装 ruby 包管理工具 RVM(适用于 Debian 系列)

    1. 安装 GPG keys 先安装 gpg2 工具 sudo apt install gnupg2 再安装 keys gpg2 --recv-keys 409B6B1796C275462A17031 ...

  4. Python类函数调用:missing 1 required positional argument

    在Python中,应该先对类进行实例化,然后在应用类.注意,实例化的过程是应该加括号的.

  5. React-native 底部导航栏(二)

    1.组件安装:npm install react-native-router-flux --save 2.定义菜单图片和文字: import React, { Component } from 're ...

  6. 日语能力考试N2级核心词汇必备—形容词

    日语能力考试N2级核心词汇必备—形容词 ありがたい·有難い 难得的,值得感谢的,真高兴的あかい·赤い 红色的,左翼的,共产主义的あさい·浅い 浅的,事物的程度等小的,色淡的,浅薄的,肤浅的あつい· 1 ...

  7. Java学习路线(完整详细版)

    Java学习路线(完整详细版) https://jingyan.baidu.com/article/c1a3101e110864de656deb83.html

  8. Hash介绍

    Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就 ...

  9. 架构师必备,带你弄清混乱的JAVA日志体系!

    作者:孤独烟 出处:http://rjzheng.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任 ...

  10. windows 快捷键相关命令

    Mstsc  远程链接 Taskmgr 任务管理器 Regedit  打开注册表 Netstat -ano | find  “80” 查找内容 tasklist /fi "pid eq 57 ...