一、赋值对比

1、列表

l1 = [1,2,3]

l2 = l1

l1.append('a')

print(l1,l2) #[1, 2, 3, 'a'] [1, 2, 3, 'a']

print(id(l1),id(l2)) #43499848 43499848

#可以看到两个列表的值以及id值相同,对应的是同一个内存地址

2、字典

dic = {'name':'barry'}

dic1 = dic

dic['age'] = 18

print(dic,dic1) #{'name': 'barry', 'age': 18} {'name': 'barry', 'age': 18}

print(id(dic),id(dic1)) #31157344 31157344

#可以看到两个字典的值以及id值相同,对应的是同一个内存地址

3、字符串

s = 'alex'

s1 = s

s2 = s.replace('a','A')

print(s,s1,s2) #alex alex Alex

print(id(s),id(s1),id(s2)) #31040208 31040208 31040376

#赋值是同一个内存地址,替换字符串后的变量s2是另外的地址

二、深浅copy

1、浅copy

对于浅copy来说,第一层创建的是新的内存地址。而从第二层开始,指向的是同一个内存地址,所有,对于第二层以及更深的层数来说,保持一致性。

# 1、普通浅copy

l1 = [1,2,3,4]

l2 = l1.copy()

l1.append('a')

print(l1,l2) #[1, 2, 3, 4, 'a'] [1, 2, 3, 4]

print(id(l1),id(l2)) #37077320 37078664

#id内存地址不一样,创建了两个地址空间,一个改变,另一个不会变化

# 2、嵌套浅copy

import copy

l1 = [1,[22,33,44],3,4,]

l2 = copy.deepcopy(l1)

# 改变第一层

l1[0] = 111

print(l1,l2) #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]

print(id(l1),id(l2)) #43238536 43239048

# 改变第二层

l1[1].append('a')

print(l1,l2) # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]

print(id(l1),id(l2)) #43238536 43239048

2、 深copy.deepcopy()

对于深copy来说,两个是完全独立的,改变任意一个的元素(无论是多少层),另一个绝不会改变。

import copy

l1 = [1,[22,33,44],3,4,]

l2 = copy.deepcopy(l1)

# 改变第一层

l1[0] = 111

print(l1,l2) #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]

print(id(l1),id(l2)) #43238536 43239048

# 改变第二层

l1[1].append('a')

print(l1,l2) # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]

print(id(l1),id(l2)) #43238536 43239048

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: python3 深浅copy对比详解

本文地址: http://www.cppcns.com/jiaoben/python/267988.html

python3 copy_python3 深浅copy对比详解相关推荐

  1. python3.8.1安装教程-Linux安装Python3.8.1的教程详解

    本例以Linux上安装Pyhton3.8版本为例进行说明 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-dev ...

  2. python安装方法3.8.2_Linux安装Python3.8.1的教程详解

    本例以Linux上安装Pyhton3.8版本为例进行说明 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-dev ...

  3. racle B-Tree和Bitmap索引对比详解

    http://space.itpub.net/13062352/viewspace-614553 oracle B-Tree和Bitmap索引对比详解 B树索引是所有大型关系数据库毕用的技术,也是or ...

  4. php打印出函数的内容吗,PHP打印函数集合详解以及PHP打印函数对比详解(精)

    1 echo();2 print();3 die();4 printf();5 sprintf();6 print_r();7 var_dump(); 1 echo() 可以同时输出多个字符串,可以多 ...

  5. python input函数详解_对Python3中的input函数详解

    下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...

  6. 用python3做学生管理系统_详解用python实现基本的学生管理系统(文件存储版)(python3)...

    详解用python实现基本的学生管理系统(文件存储版)(python3) 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解用python实现基本的学生管理系统(文件存储版)( ...

  7. python3 yield 大文件_详解Python3中yield生成器的用法

    任何使用yield的函数都称之为生成器,如: def count(n): while n > 0: yield n #生成值:n n -= 1 另外一种说法:生成器就是一个返回迭代器的函数,与普 ...

  8. Python3爬虫之Selenium库详解

    1.Selenium库的介绍: Selenium库是用来自动化测试的工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染的问题.给浏览器发送指令,使得浏览器做出跳转,点击,下拉等动作,模拟 ...

  9. python3 绝对值_Python3 abs() 函数详解 获取数字的绝对值

    Python3 abs() 函数详解 获取数字的绝对值 abs函数是Python的内置函数,在python文件中直接可以使用. 它的主要用途是获取数字的绝对值. 语法 abs(n) 参数 n - 数值 ...

最新文章

  1. 大佬都在用的桑基图到底怎么做?告诉你个最简单的方法
  2. java commons.util_Java — CommonUtil
  3. Linux编程手册读书笔记第二章(20140330)
  4. 支付宝 “集五福”今日开启;小米起诉美国国防部;Chrome 再次屏蔽七个端口 | 极客头条...
  5. 前端使用 geetest 行为验证 web-部署教程
  6. python实现时间戳和时间格式转换以及当前时间,特定时间的前后偏移
  7. MySQL使用规范手册,程序员必知必会
  8. 算法萌新如何学好动态规划(二)
  9. 文件夹被隐藏生成同名.exe文件的文件夹图标病毒你还不会解决?
  10. 图像处理之图像噪声和各种噪声的matlab实现
  11. 互联网行业中,哪些职位比较有前途?
  12. java技术--报警通知及实现方式
  13. test %eax %eax
  14. 阿里、腾讯“打包”领跑云计算,两极格局将就此固化?
  15. 字节跳动2021批笔试题解
  16. html生成闪电特效
  17. GridView分页详解
  18. GPS实验二:GPS接收机的使用
  19. 『网络迷踪』ctfshow-国足加油
  20. SAP物料货架寿命管理

热门文章

  1. mysql bundle.tar_MySQL 5.6 Bundle Tar安装
  2. react 判断地址是否有效_继续,react-redux原理解析
  3. 无障碍开发(六)之ARIA在HTML中的使用规则
  4. CF1070L Odd Federalization 高斯消元
  5. Python:Selenium 1:浏览器驱动
  6. Java多线程:线程间通信之Lock
  7. SpringMVC深度探险(二) —— SpringMVC概览
  8. LeetCode Best Time to Buy and Sell Stock II
  9. poj 1987 树的分治
  10. 关于modelsim 6.4a遇到的问题