首页 > 编程语言 >Python 深浅拷贝

Python 深浅拷贝

时间:2023-06-17 14:45:09浏览次数:46  
标签:Python a1 ## 深浅 print 拷贝 copy id

Python 深浅拷贝

一、数字、字符串

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

import copy
# ######### 数字、字符串 #########
n1 = 123
# n1 = "evescn"
print(id(n1))
 
# ## 赋值 ##
n2 = n1
print(id(n2))
 
# ## 浅拷贝 ##
n2 = copy.copy(n1)
print(id(n2))
  
# ## 深拷贝 ##
n3 = copy.deepcopy(n1)
print(id(n3))
 
 
# 输出结果
491687936
491687936
491687936
491687936

二、字典、元组、列表

对于字典、元组、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

  • 赋值,只是创建一个变量,该变量指向原来内存地址,如:

import copy

a1 = {'name': 'evescn', 'age': 15, 'job': ['author', 'worker']}
print(id(a1))

# ## 赋值 ##
a2 = a1
print(id(a2))

# 输出结果
35047048
35047048
  • 浅拷贝,在内存中只额外创建第一层数据

import copy
  
a1 = {'name': 'evescn', 'age': 15, 'job': ['author', 'worker']}
# ## 浅拷贝 ##
a3 = copy.copy(a1)
 
print(id(a1))
print(id(a3))

print(id(a1['job']))
print(id(a3['job']))

# 输出结果
5949064
35737672

36063304
36063304
  • 深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

import copy
 
a1 = {'name': 'evescn', 'age': 15, 'job': ['author', 'worker']}
# ## 深拷贝 ##
a4 = copy.deepcopy(a1)

print(id(a1))
print(id(a4))

print(id(a1['job']))
print(id(a4['job']))

# 输出结果
35243656
35244040

44320840
44264136  

标签:Python,a1,##,深浅,print,拷贝,copy,id
From: https://www.cnblogs.com/evescn/p/17487466.html

相关文章

  • python 生成器 yield
    生成器属于迭代器https://mp.weixin.qq.com/s/F3GLVY2EUpISpt_koCDmWg生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方......
  • python之json和ymal模块
    json和ymal是常用的数据交换格式,ymal可以看做是json的超集。1json格式json(JavaScriptObjectNotation)是一种轻量级的数据交换格式,常用于在不同系统之间进行数据传输和存储。它由键值对构成的集合组成,通常以文件扩展名.json命名。JSON的结构非常简单,有两种基本的数据结构:1.......
  • Python自学整理
    Python对大小写敏感。在Windows下可以不写第一行注释:#!/usr/bin/python3第一行注释标的是指向python的路径,告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器。此外还有以下形式(推荐写法):#!/usr/bin/envpython3这种用法先在env(环境变量)设置里查找pyth......
  • Python 文件操作(转载)
    Python文件操作操作文件时,一般需要经历如下步骤打开文件操作文件一、打开文件文件句柄=open('文件路径','模式')打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。打开文件的模式有r,只读模式(默认)。w,只......
  • Python os 模块简述
    os模块简介os就是“operatingsystem”的缩写,顾名思义,os模块提供的就是各种Python程序与操作系统进行交互的接口。通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面页也可以极大增强代码的可移植性。如果该模块中相关功能出错,会抛出OSError异常或其子类异常。impo......
  • Python程序与设计
    2-27在命令行窗口中启动的Python解释器中实现在Python自带的IDLE中实现print("Helloworld")编码规范每个import语句只导入一个模块,尽量避免一次导入多个模块不要在行尾添加分号“:”,也不要用分号将两条命令放在同一行建议每行不超过80个字符使用必要的空行可以增加代码的可读性运算......
  • Python自动化运维
    2-27在命令行窗口中启动的Python解释器中实现在Python自带的IDLE中实现print("Helloworld")编码规范每个import语句只导入一个模块,尽量避免一次导入多个模块不要在行尾添加分号“:”,也不要用分号将两条命令放在同一行建议每行不超过80个字符使用必要的空行可以增加代码的可读性运算......
  • Python数据类型-字典与集合
    """题目1:下面关于字典的定义正确的是:CA.d={1,}B.d={1,2:3,4}C.d={'name':'xinlan','age':18}D.d={[1,2]:[3,4],'age':18}"""#题目2:请创建一个字典用来表示你自己的个人信息。有哪些key由你自己来决定。my_info={'name':&......
  • Day01 1.4 Python虚拟环境的搭建
    Day011.4Python虚拟环境的搭建【一】虚拟环境介绍(1)虚拟环境优点1、使不同应用开发环境相互独立2、环境升级不影响其他应用,也不会影响全局的python环境3、防止出现包管理混乱及包版本冲突(2)什么是虚拟环境,为什么要有它?它解决了什么问题操作系统装了python3.8使用djang......
  • python入门学习之《python编程快速上手》
    #《python编程快速上手》1-9章第1-2章:python基础和控制流#python严格区分大小写;#代码行的缩进很重要,一般用4个空格。大多数情况下,代码行缩进告诉python它属于哪个代码块。#python下标从0开始;#行末使用续行字符\,将一行指令写成多行。在[],{},或()中的多行语句,不需要使用反斜......