23-python基础-python3-浅拷贝与深拷贝(1)
1.可变和不可变数据类型。
- 列表是‘可变的’数据类型,它的值可以添加、删除或改变。
- 字符串是‘不可变的’,它不能被更改。
(1)字符串
- 尝试对字符串中的一个字符重新赋值,将导致TypeError错误。
a = 'abcd'
a[0]='e' Traceback (most recent call last):
4 File "C:\Users\summer\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
5 exec(code_obj, self.user_global_ns, self.user_ns)
6 File "<ipython-input-37-93bf15c8bf3d>", line 1, in <module>
7 a[0]='e'
8 TypeError: 'str' object does not support item assignment
- ‘改变’一个字符串的正确方式,使用切片和连接
a = 'abcd'
a = a[:1]+'e'+a[1:]
a
'aebcd'
(2)列表
- 区别:列表的覆盖和修改
- 列表覆盖(并不能修改列表,而是创建一个新的列表)
b = [1,2,3]
id(b)
Out[42]: 95411912
b = [2,3,4]
id(b)
Out[44]: 95411720
- 列表修改(在当前列表修改,不会创建新的列表)
b = [1,2,3]
id(b)
Out[46]: 93984712
b.append(4)
b
Out[48]: [1, 2, 3, 4]
id(b)
Out[49]: 93984712
del b[0]
b
Out[51]: [2, 3, 4]
id(b)
Out[52]: 93984712
(3)元组
- 元组与列表的主要区别在于,元组像字符串一样,是不可变的。元组不能让它们的值被修改、添加或删除。
a = ('hello',1,'a')
a[0]=1
3 Traceback (most recent call last):
4 File "C:\Users\summer\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
5 exec(code_obj, self.user_global_ns, self.user_ns)
6 File "<ipython-input-54-f9da761c742a>", line 1, in <module>
7 a[0]=1
8 TypeError: 'tuple' object does not support item assignment
2. 引用
- 引用是一个值,指向某些数据。
- 在变量必须保存可变数据类型的值时,例如列表或字典,Python 就使用引用。
- 将列表赋给一个变量时,实际上是将列表的“引用”赋给了该变量。列表引用是指向一个列表的值。
- 对于不可变的数据类型的值,例如字符串、整型或元组,Python变量就保存值本身。
spam = [0, 1, 2, 3, 4, 5]
id(spam)
Out[66]: 95545224
cheese = spam
cheese
Out[68]: [0, 1, 2, 3, 4, 5]
id(cheese)
Out[69]: 95545224
cheese[1]='hello'
cheese
Out[71]: [0, 'hello', 2, 3, 4, 5]
spam
Out[72]: [0, 'hello', 2, 3, 4, 5]
id(cheese)
Out[73]: 95545224
id(spam)
Out[74]: 95545224
23-python基础-python3-浅拷贝与深拷贝(1)的更多相关文章
- python 基础之浅拷贝与深拷贝
浅拷贝与深拷贝 1.普通赋值 例1: a = 15b = aa = 16print(b)#例2:lst1 = [1,2,3]lst2 = lst1lst1.append(4)print(lst2)#这 ...
- [编程基础] Python对象的浅拷贝与深拷贝笔记
Python中的赋值语句不创建对象的副本,它们只将名称绑定到对象.对于不可变的对象,这通常没有什么区别.但是对于处理可变对象或可变对象的集合,您可能需要寻找一种方法来创建这些对象的"真实副本 ...
- python 进阶篇 浅拷贝与深拷贝
阐述引用.浅拷贝和深拷贝前,首先需要要了解 Python 的世界里,一切皆对象,每个对象各包含一个 idendity.type 和 value. 引用(Reference) >>> ...
- Python 引用、浅拷贝、深拷贝解析
引用 Python是动态数据类型的语言,故在对变量进行赋值时是不用制定变量类型的. 或者说,你可以把变量赋值的过程,当作是贴一个标签,去引用该数据. 看下面的例子: In [54]: a=4 In [ ...
- python赋值、浅拷贝、深拷贝区别
在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...
- Python 赋值、浅拷贝和深拷贝
初学Python,和C++还是有许多不同.直接赋值.浅拷贝和深拷贝,这三种拷贝对象的操作之间还是有许多的区别.Python语言的版本为2.7,在Pycharm中进行实验. 一.直接赋值 用下面的代码来 ...
- Python赋值、浅拷贝、深拷贝
一.赋值(assignment) >>> a = [1, 2, 3] >>> b = a >>> print(id(a), id(b), sep= ...
- python中的浅拷贝,深拷贝
直接引用,间接引用 # 1.列表存储的是索引对应值的内存地址,值会单独的开辟一个内存空间 list = ["a","b"] 内存里面存储的就是list[0],l ...
- python中的浅拷贝和深拷贝
1.赋值语句 a = 'abc' b = a print id(a) print id(b) # id(a):29283464 # id(b):29283464 通过简单的复制,我们可以看到,a b其 ...
- 16.python中的浅拷贝和深拷贝
在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b
随机推荐
- 什么是中间件?中间件和java应用关系是什么
中间件,比如websphere 是一种独立的系统软件,你的java应用要通过它来管理,比如数据库连接,消息通信等,中间件位于操作系统之上.简单滴说,你不可能直接把你的java应用部署在操作系统上,得由 ...
- 背包九讲(Orz)
P01: 01背包问题 题目 有\(N\)件物品和一个容量为\(V\)的背包.第\(i\)件物品的费用是\(c[i]\),价值是\(w[i]\).求解将哪些物品装入背包可使这些物品的费用总和不超过背包 ...
- 使用TortoiseGit合并分支
1.切换到主分支 2.右击选择merge, 选择被合并的分支
- Java开发者职业生涯要看的200+本书
作者:老刘链接:https://www.zhihu.com/question/29581524/answer/684872838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- linux 用户空间与内核空间——高端内存了解
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数 ...
- 最大公因数数gcd模板
首先蒟蒻是在大佬的博客里学习的代码,代码风格多有相似之处,大佬博客https://www.cnblogs.com/lMonster81/p/10433902.html 最大公因数那,顾名思义就是两个数 ...
- noip2010机器翻译
以下题面摘自洛谷1540 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换. ...
- java应用之solr入门篇
前言 solr是apache项目的一款全文搜索应用. 官方文档http://lucene.apache.org/solr/guide/6_6/ 入门流程 1.安装 ---> 2.启动 - ...
- jQuery遍历之向上遍历
1.parent $(document).ready(function(){ $("a").parent().css({border:"4px solid black&q ...
- python中二维数组的建立,输入和输出
''' for循环: for i in range(x,y,dir): pass 首先这个区间是左闭右开 其次dir在省略的情况下默认为1,就是每次加一,也可以指定 python的数组: python ...