当前位置: 首页 > news >正文

python中list的深拷贝和浅拷贝

其实这还是涉及到python中的可变对象和不可变对象的概念。

https://www.cnblogs.com/poloyy/p/15073168.html

# -*- coding: utf-8 -*-person = ['name', ['savings', 100.00]]
hubby = person[:] # slice copy
wifey = list(person) # fac func copy
a = [id(x) for x in person]
b = [id(x) for x in hubby]
c = [id(x) for x in wifey]
print("person", a) # person [2581907861552, 2582842106496]
print("hubby", b) # hubby [2581907861552, 2582842106496]
print("wifey", c) # wifey [2581907861552, 2582842106496]print(id(a), id(b), id(c)) # 2582843034240 2582843034496 2582843035200hubby[0] = "Jack" 
# ------------------------!!!!!------------------
# 第一步: 等号右边,创建"Jack"字符串,第二步:将"Jack"的地址链接到hubby的第一个元素上
# ------------------------!!!!!------------------
print(person, hubby, wifey)
# ['name', ['savings', 100.0]] ['Jack', ['savings', 100.0]] ['name', ['savings', 100.0]]
print(id(hubby[0]), id(person[0])) # 2582842278064 2581907861552hubby[1][0] = "saved"  
# 这一步相当于直接改变了只有一层的['savings', 100.00]的第一个元素,所以任何引用这个只有一层的
# list的变量,都会改变对应的值。这也是对单层list和对嵌套list要注意深拷贝和浅拷贝的原因。
print(person, hubby, wifey)# ['name', ['saved', 100.0]] ['Jack', ['saved', 100.0]] ['name', ['saved', 100.0]]
d = 'name'
print(id(d)) # 2581907861552
d = "jack"
print(id(d)) # 2582842106800
dic = {"a": ["1","2", "3"],"b": ["1","2", "3"],"c": ["1","2", "3"],}c = "2"
print(id(dic["a"][1]), id(c))
# 这一步说明在python内,对于同一个不可变数据类型,都是使用的同一个地址,
# 因为是不可变数据类型,原子化操作的了,所以即使在不同的数据结构中,
# 使用的地址一样也没关系,因为它已经是不可变的了。其值不可以被改变,如果
# 不再继续用这个值,用另一个值就可以了。
a = [1,2,3]
b = a + [6]
print(a, b)
[1, 2, 3] [1, 2, 3, 6]a[0] = 10
print(a, b)[10, 2, 3] [1, 2, 3, 6]可以发现b的值并没有因为a[0]的改变而改变,因为b本身也是一个一维的list,只有一层
b里面的存储: [id(1), id(2), id(3), id(4)]
然后改变a之后,a由[id(1), id(2), id(3)] -> [id(10), id(2), id(3)],
并不会影响b。
也就是说,内存地址直接连接到不可变对象的,互相改来改去是没有影响的。所以说,对于单层的list,浅拷贝看起来就直接是类似于深拷贝那种,不会互相影响。
个人理解:如果一个list中包着单层dict,也不一定就是单层list,应该是list里只包着不可变对象这种的,
才应该被理解为单层list。

相关文章:

python中list的深拷贝和浅拷贝

其实这还是涉及到python中的可变对象和不可变对象的概念。 https://www.cnblogs.com/poloyy/p/15073168.html # -*- coding: utf-8 -*-person [name, [savings, 100.00]] hubby person[:] # slice copy wifey list(person) # fac func copy a [id(x) for x in person] b …...

【LeetCode】字母异位词分组

题目描述: 给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”…...

Golang | Leetcode Golang题解之第295题数据流的中位数

题目: 题解: type MedianFinder struct {nums *redblacktree.Treetotal intleft, right iterator }func Constructor() MedianFinder {return MedianFinder{nums: redblacktree.NewWithIntComparator()} }func (mf *MedianFinder) AddNum(…...

【C语言】C语言期末突击/考研--数据的输入输出

目录 一、printf()输出函数介绍 二、scanf读取标准输入 (一)scanf函数的原理 (二)多种数据类型混合输入 三、练习题 今天我们学习printf和scanf读取标准输入。下面我们开始正式的学习吧。 C语言中有很多内置函数,今…...

How can I fix my Flask server‘s 405 error that includes OpenAi api?

题意:解决包含OpenAI API的Flask服务器中出现的405错误(Method Not Allowed,即方法不允许) 问题背景: Im trying to add an API to my webpage and have never used any Flask server before, I have never used Java…...

LeetCode Hot100 将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确…...

【Linux】线程的控制

目录 线程等待 线程退出 线程的优缺点 线程独占和共享的数据 我们说Linux是用进程模拟的线程,所以Linux中只有轻量级进程的概念,但是,用户是只认线程的,所以我们有一个叫原生线程库的东西,它就负责把轻量级进程的系…...

Vue3自研开源Tree组件:人性化的拖拽API设计

针对Element Plus Tree组件拖拽功能API用的麻烦,小卷开发了一个API使用简单的JuanTree组件。拖拽功能用起来非常简单! 文章目录 使用示例allowDragallowDrop支持节点勾选支持dirty检测后台API交互 源码实现 使用示例 组件的使用很简单: 通过…...

MYSQL--触发器详解

触发器 1.触发器简介 触发器(trigger)是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update…...

C++实用指南:Lambda 表达式的妙用

Lambda 表达式的灵活性和强大功能确实为编程提供了许多便利。但是我们发现许多开发者仍然无法灵活运用其便利,于是写了这篇文章。 Lambda 允许我们编写更简洁和灵活的代码。例如在处理网络请求时,我们经常需要确保响应与当前的状态或需求仍然相关。通过…...

FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 梳理下思路 1.判断是否登录 2.课程是否存在 3.如果是回复,查看回复是否存在 4.是否有权限 5.发起评论 首先新增pydantic模型 class Cour…...

基于springboot+vue+uniapp的居民健康监测小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...

TypeScript基础【学习笔记】

一、TypeScript 开发环境搭建 下载并安装 Node.js使用 npm 全局安装 typescript 进入命令行输入:npm i -g typescript 创建一个 ts 文件使用 tsc 对 ts 文件进行编译 进入命令行进入 ts 文件所在目录执行命令:tsc xxx.ts 二、基本类型 类型声明 通过类型…...

树莓派物联网服务器搭建流程:集成 Node.js、InfluxDB、Grafana 和 MQTT 协议

目录 一、搭建准备 1. 硬件要求 2. 软件要求 二、技术栈概述 三、搭建步骤 1. 安装操作系统 2. 启动树莓派 3. 更新系统 4. 安装必要的软件 4.1 安装 Python 和 Flask 4.2 安装 Node.js 4.3 安装 Mosquitto(MQTT Broker) 4.4 安装 InfluxDB…...

typescript 断言

/* 断言 确定后期一定是某种格式 可用于表单大对象初始化是空,赋值时有具体字段。前期断言是会是某种格式 */interface obj {name: stringlocation: stringage?: number }// 会报错 // let data: obj { // // } let data: obj {} as obj; // 断言data会有obj里…...

期刊评价指标及其查询方法

1、期刊评价体系一 科睿唯安《期刊引证报告》(Journal Citation Reports, JCR) 科睿唯安每年发布的《期刊引证报告》(Journal Citation Reports, JCR)是一个独特的多学科期刊评价工具。JCR数据库提供基于引文数据的统计信息的期…...

巴斯勒相机(Basler) ACE2 dart 系列说明和软件

巴斯勒相机(Basler) ACE2 dart 系列说明和软件...

【Pycharm中anaconda使用介绍】

在安装好anaconda之后,首先打开anaconda界面,执行以下操作 1.查看Anaconda中当前存在的环境 conda info -e 或者 conda-env list 查看–安装–更新–删除包 conda list: conda search package_name 查询包 conda install package_name conda …...

2024下半年,前端的技术风口来了

“ 你近期有体验过哪些大模型产品呢? 你有使用大模型API做过一些实际开发吗? 在你日常开发中,可以与大模型相关应用结合来完成工作吗? ” **最近,一直在和同事聊,关于前端可以用大模型干点啥&#xff…...

Spock Unit Test in Java

优质博文:IT-BLOG-CN 一、简介 Spock是一个基于Groovy语言的测试和规范框架,使得测试代码更简介,得益于JUnit Runner,Spock兼容大部分IDE和测试框架JUnit/JMock/Powermock等。基于BDD行为驱动开发,功能非常强大。提…...

Go语言如何部署到K8s_Go语言Kubernetes部署教程【进阶】

Go服务容器化失败主因是镜像路径与WORKDIR不匹配、containerPort未对齐监听端口、Probe未适配程序健康接口、ConfigMap/Secret挂载权限不足,需逐一核验镜像内容、网络声明、文件权限及进程监听行为。Go 服务打包成容器镜像时,main.go 路径和 WORKDIR 不匹…...

科技企业如何利用智能手段提升研发效率?

观点作者:科易网-国家科技成果转化(厦门)示范基地 现状概述:传统研发模式的瓶颈与挑战 在全球科技创新加速迭代的背景下,科技企业面临的核心挑战之一是如何提升研发效率。传统研发模式往往存在以下痛点: 信…...

新手福音:在快马平台体验vscode codex式辅助,轻松写出第一行代码

最近在学编程,发现很多新手(包括我自己)最头疼的就是面对空白的编辑器不知道从哪下手。传统的学习方式要么是直接看教程照抄代码,要么是硬啃文档记语法,很容易劝退。直到我发现了InsCode(快马)平台的智能辅助功能&…...

Qwen3-14B WebUI权限分级:管理员/普通用户/只读访客三类角色配置

Qwen3-14B WebUI权限分级:管理员/普通用户/只读访客三类角色配置 1. 权限分级的重要性与场景需求 在私有化部署Qwen3-14B模型时,企业或团队通常需要根据不同成员的职责分配不同的操作权限。合理的权限分级能够: 保障系统安全:防…...

1.3 装饰器与上下文管理器

📘 第一阶段 1.3 装饰器与上下文管理器学习目标:彻底掌握 Python 中用于代码复用和资源管理的高级特性,理解它们在 FastAPI 中的底层应用。 预计用时:2 天(每天约 3 小时) 重要程度:⭐⭐⭐⭐&a…...

Linux命令中的mtr命令详解

mtr 是一个功能强大的网络诊断工具,它结合了 ping 和 traceroute 的功能,并提供了实时、持续的连接质量统计数据。它是排查网络问题、定位网络瓶颈的利器。mtr(My Traceroute)在单个界面中同时展示了数据包从源主机到目标主机所经…...

Linux 下 tar 命令归档与压缩完整指南

存档文件是包含多个文件的单个常规文件或设备文件,可用于创建可管理的个人备份,或者在其他方法(如 rsync)不可用时简化通过网络传输文件的任务。在 Linux 系统中,tar 实用程序是用于创建、管理和提取存档的常用命令。存…...

洛谷P1678烦恼的高考志愿题解

一、题目理解输入:第一行、m所学校,n位学生第二行、m个预计录取分数第三行、n个学生估分成绩输出:最小不满意度之和二、解题思路其实这题就是简单的二分,对于我这种菜鸟来说,咱就用最简单最好理解的方式来写。1、首先观…...

重构缠论分析范式:四维动态识别引擎突破技术交易认知瓶颈

重构缠论分析范式:四维动态识别引擎突破技术交易认知瓶颈 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 副标题:面向量化交易者的通达信可视化插件技术解析 揭示行业痛点&#…...

显卡显存稳定性终极检测指南:memtest_vulkan免费工具快速诊断GPU问题

显卡显存稳定性终极检测指南:memtest_vulkan免费工具快速诊断GPU问题 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 核心关键词:显卡显…...