python如何复制一个变量_Python中变量、赋值、浅拷贝、深拷贝
在理解浅拷贝和深拷贝之前,首先要理解学习一下变量在Python中是怎样存储的;
变量的类型是分值引用与地址引用两种.
python的一切变量都是对象,变量的存储,采用了地址引用的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身。
在Python中,是有多种数据类型:bool、int、long、float、string、list、dict、tuple、set;
其中可分为基本数据类型和复杂数据结构;
基本数据类型:bool、int、long、float、string;
复杂数据结构:list、dict、tuple、set;(对于能存储基本数据类型的变量可以把它看做复杂数据结构)
由于Python中的变量存储都是地址引用,所以说复杂数据结构(list、dict、tuple、set)中存储的变量也仅仅是变量的地址。
一、变量的初始化(赋值):
1.Python中变量的初始化就是在内存中新开辟一块存储变量的值的内存,把这块内存的地址赋值给变量。(变量中存的是值的地址)
1 >>> str_1 = 'abc'
2 >>>id(str_1)3 4300773168
4 >>> str_2 =str_15 >>>id(str_2)6 4300773168
在给已经初始化的变量重新初始化的时候,就会重新更改变量中的地址。
1 >>> str_1 = 123
2 >>>id(str_2)3 4300773168
4 >>>id(str_1)5 4297541792
2.而在复杂数据结构中,更改数据结构中的元素(基本数据类型),仅仅是改变了这个元素的地址,而不会影响复杂数据结构本身的地址。
1 >>> list_1 =[1,2,3]2 >>>id(list_1)3 4320183368
4 >>> list_1.append(9)5 >>> list_1[2] = 22
6 >>> list_1.pop(2)7 3
8 >>> print(list_1,id(list_1))9 [1, 2, 22, 5, 6, 9] 4320183368
通过上边的事例做出结论:
当复杂数据结构(list、dict、tuple、set)赋值时,是在计算机中开辟一块内存来存储这个复杂数据结构的值,而修改其中元素的时候只是更改了复杂数据结构的元素的地址,不会影响复杂数据结构的地址(就像一个桌子上有坐着两个人,而桌子上的菜两个人是共同享有);当重新赋值时,会重新开辟新的内存来存储变量的值,把这块内存的地址存到变量中。(相当于桌子上的一个人移到了另一个桌子上吃)
二、拷贝:
在Python中,我们有时候要保存一份数据,再去对这块数据进行处理,而这个时候Python提供了两种拷贝方式:浅拷贝、深拷贝。
1.浅拷贝
浅拷贝: 不管是多么复杂的数据结构,浅拷贝只会拷贝第一层.
1 importcopy2 list_1 = [1,2,['a','b','c'],3]3 list_2 =list_1[:]4 #list_2 = copy.copy(list_1)浅拷贝的另一种方式
5 list_1[2][1] = 'kk'
6 print(list_1,list_2,id(list_1[2]),id(list_2[2]))7 [1, 2, ['a', 'kk', 'c'], 3] [1, 2, ['a', 'kk', 'c'], 3] 43305137364330513736
由于浅拷贝只会拷贝list_1的第一层,所以元素中的list的地址没有被更改,说明list_1和list_2共享同一个第二层的list。
2.深拷贝:
深拷贝会完全复制原变量的所有数据,在内存中生成一套完全一样的内容,我们对这两个变量中的一个进行任意修改都不会影响另一个变量。
1 importcopy2 list_1 = [1,2,['a','b','c'],3]3 list_2 =copy.deepcopy(list_1)4 list_1[2][1] = 'kk'
5 print(list_1,list_2,list_1[2],list_2[2])6 [1, 2, ['a', 'kk', 'c'], 3] [1, 2, ['a', 'b', 'c'], 3] 4330513736 4330512584
python如何复制一个变量_Python中变量、赋值、浅拷贝、深拷贝相关推荐
- Interview:算法岗位面试—10.11下午—上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点、python的可变不可变的数据类型、赋值浅拷贝深拷贝区别
ML岗位面试:10.11下午-上海某公司算法岗位(偏机器学习,互联网数字行业)技术面试考点之XGBoost的特点.python的可变不可变的数据类型.赋值浅拷贝深拷贝区别 Interview:算法岗位 ...
- python怎么定义一个数字_Python数字变量定义赋值
一.任务描述 本实验的任务主要对Python的变量赋值进行基本操作,通过完成本实验任务,要求学生熟练掌握Python的变量赋值与定义,并对Python变量的基本操作进行整理并填写工作任务报告. 二.任 ...
- python 双下划线变量_python 中变量的单下划线与双下划线的区别
Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from module import *' 导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 在 Python ...
- 一文搞懂JS中的赋值·浅拷贝·深拷贝
前言 为什么写拷贝这篇文章?同事有一天提到了拷贝,他说赋值就是一种浅拷贝方式,另一个同事说赋值和浅拷贝并不相同.我也有些疑惑,于是我去MDN搜一下拷贝相关内容,发现并没有关于拷贝的实质概念,没有办法只 ...
- python中函数可以赋值给一个变量_python中函数赋值给变量时的问题注意详解
变量赋值是我们在日常开发中经常会遇到的一个问题,下面这篇文章主要给大家介绍了关于python中将函数赋值给变量时需要注意的一些问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的 ...
- Python批量复制一个文件夹中的全部excel数据并粘贴至一个excel文件中-openpyxl模块
最近工作经常要把多张相同表头,不同内容的数据汇总到一张excel中,为节省复制粘贴时间,我找到了Python中的openpyxl模块进行处理,读取一个文件夹下所有的excel文件并写入一张excel中 ...
- python怎么输出一个数组_python中实现将多个print输出合成一个数组
比如有下面一段代码: for i in range(10): print ("%s" % (f_list[i].name)) 该代码段的执行,会生成如下的10行"name ...
- python实现输入一个正整数_Python中实现输入一个整数的案例
我就废话不多说了,大家还是直接看代码吧! #! usr/bin/python3.5 # -*- coding:utf-8 -*- a = input("请输入一个整数:") #py ...
- python怎样定义一个数组_python中数组创建
python中数组.列表.字典是最为常见的.最近在学习有关数组的语句,就把自己的学习的一些内容写下来. 首先就是创建数组. 方法1:创建数组的方法很简单直接,就是在shell界面写出来想要创建的数组 ...
最新文章
- 机器人也来玩“踢瓶盖挑战”了,你动他就动,靠脑电控制,路人也能玩丨MIT出品...
- 你会么?图形不正,角度是随机的
- Linux下的FTP命令害死人
- bzoj 1369: Gem 树形dp
- 不经意传输(oblivious transfer)
- 怎么查jupyter lab 内核_抗氧化精华推荐 CHA:LAB诗蕾泊帮你告别“零点肌”|抗氧化|精华-综合资讯...
- linux 提示库文件,Linux系统下确实库文件的解决办法
- Kotlin学习笔记23 协程part3 lambda表达式深入 挂起函数 全局协程
- Youki的C++命名规则
- 索尼音乐牵手UNLEASH厂牌 实力新星LiCong李聪 Veegee正式加盟
- win7工作组无法查看计算机名,win7系统无法查看工作组计算机怎么解决
- AutoCAD2000 DWG 格式 section location部分(简述)
- 账号跟帐号、账户跟帐户的区别
- Largest Contentful Paint (LCP)
- 树莓派官网VNC配置
- 记lrd的高二上学期第五次调研考试
- Linux运维人员成长之路必学书籍资料推荐
- 2022电工杯A题B题高质量保奖代码思路合集
- 【知识碎片】Net项目经验积累
- 哒哒哒哒哒哒,哒哒哒哒哒哒哒哒
热门文章
- Linux系统中df与du命令查看分区大小
- PMM (Percona MySQL Monitor) 部署
- C++四种强制类型转换 dynamic_cast,const_cast,static_cast,reinterpret_cast
- 近二十年大数据行业怎么样?解决了什么?经历了什么?
- 对于多表查询和转账的事务提交
- leetcode 355. Design Twitter | 355. 设计推特(Java)
- 递归算法题解析:设m,n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目
- 【MySQL】查看 mysql 数据库最后修改时间、创建时间、表大小
- 【PAT甲级】1048 Find Coins (25 分) C++ 全部AC
- 小师妹学JVM之:Dirty cards和PLAB