Python深拷贝与浅拷贝_python 赋值

Python深拷贝与浅拷贝_python 赋值深拷贝和浅拷贝不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值importcopya=1b=co

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

深拷贝和浅拷贝

不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值

import copy


a = 1
b = copy.copy(a)  # 浅拷贝a
c = copy.deepcopy(a)  # 深拷贝a
print(a is b)
print(a is c)

>>> True
>>> True

is比较的是二者的内存地址是否相同

 

浅拷贝

浅拷贝只拷贝可变对象的第一层,如果可变对象中还有可变的对象,那么第二层拷贝不到,拷贝不到就是说,第二层的内存地址是共用的,都是指向同一片内存地址

import copy


a = [1, 2, [3, 4]]
b = copy.copy(a)
print(a is b)
print(a[2] is b[2])

>>> a的内存地址 140369750660592
>>> b的内存地址 140369750677376
>>> False
>>> a[2]的内存地址 140369750677056
>>> b[2]的内存地址 140369750677056
>>> True

浅拷贝只拷贝第一层,所以b拷贝出来的内存地址是与a不同的,
但因为浅拷贝只能拷贝第一层,所以b[2]这个列表拷贝不到,指向的内存地址仍然是a[2]的内存地址

 

深拷贝

深拷贝对于可变的对象,全部拷贝下来,全部都开辟一片新的内存地址

import copy


a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
print('a的内存地址', id(a))
print('b的内存地址', id(b))
print(a is b)
print('a[2]的内存地址', id(a[2]))
print('b[2]的内存地址', id(b[2]))
print(a[2] is b[2])

>>> a的内存地址 140312626337184
>>> b的内存地址 140312626353968
>>> False
>>> a[2]的内存地址 140312626353648
>>> b[2]的内存地址 140312626337264
>>> False
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165841.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android并发处理最佳做法

    Android并发处理最佳做法

    2021年10月1日
    44
  • python pip源更换国内镜像,速度加快10倍

    python pip源更换国内镜像,速度加快10倍python安装第三方模块,更换为国内的资源python的服务器是在国外的,所以我们pip安装pyqt5之类的模块时就很慢了下面就介绍了一些国内的阿里云http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/豆瓣(douban)http://pypi.do…

    2022年8月29日
    6
  • Java中如何遍历Map对象的4种方法

    Java中如何遍历Map对象的4种方法在Java中如何遍历Map对象HowtoIterateOveraMapinJava在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap,TreeMap,LinkedHashMap,Hashtable,等等)方法一在for-each循环中使用ent

    2022年4月19日
    73
  • docker官方英文手册

    docker官方英文手册

    2021年6月10日
    96
  • css如何设置超链接样式

    css如何设置超链接样式css设置超链接样式是通过伪类来实现的 (1):link:设置a对象在未被访问前的样式表属性。(2):visited:设置a对象在其链接地址已被访问过时的样式表属性。(3):hover:设置对象在其鼠标悬停时的样式表属性。(4):active:设置对象在被用户激活(在鼠标点击与释放之间发生的事件)时的样式表属性。  css中关于超链接的四个属性正确顺序为:

    2022年7月19日
    24
  • 零基础学Java(8)数组

    零基础学Java(8)数组数组数组存储相同类型值的序列。声明数组数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标(index,或称索引)可以访问数组中的每一个值。例如,如果a是一个整型数组,a[i]就是数组

    2022年7月29日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号