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)的更多相关文章

  1. python 基础之浅拷贝与深拷贝

    浅拷贝与深拷贝 1.普通赋值 例1: a = 15b = aa = 16print(b)#例2:lst1 = [1,2,3]lst2 = lst1lst1.append(4)print(lst2)#这 ...

  2. [编程基础] Python对象的浅拷贝与深拷贝笔记

    Python中的赋值语句不创建对象的副本,它们只将名称绑定到对象.对于不可变的对象,这通常没有什么区别.但是对于处理可变对象或可变对象的集合,您可能需要寻找一种方法来创建这些对象的"真实副本 ...

  3. python 进阶篇 浅拷贝与深拷贝

    阐述引用.浅拷贝和深拷贝前,首先需要要了解 Python 的世界里,一切皆对象,每个对象各包含一个 idendity.type 和 value. 引用(Reference) >>> ...

  4. Python 引用、浅拷贝、深拷贝解析

    引用 Python是动态数据类型的语言,故在对变量进行赋值时是不用制定变量类型的. 或者说,你可以把变量赋值的过程,当作是贴一个标签,去引用该数据. 看下面的例子: In [54]: a=4 In [ ...

  5. python赋值、浅拷贝、深拷贝区别

    在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...

  6. Python 赋值、浅拷贝和深拷贝

    初学Python,和C++还是有许多不同.直接赋值.浅拷贝和深拷贝,这三种拷贝对象的操作之间还是有许多的区别.Python语言的版本为2.7,在Pycharm中进行实验. 一.直接赋值 用下面的代码来 ...

  7. Python赋值、浅拷贝、深拷贝

    一.赋值(assignment) >>> a = [1, 2, 3] >>> b = a >>> print(id(a), id(b), sep= ...

  8. python中的浅拷贝,深拷贝

    直接引用,间接引用 # 1.列表存储的是索引对应值的内存地址,值会单独的开辟一个内存空间 list = ["a","b"] 内存里面存储的就是list[0],l ...

  9. python中的浅拷贝和深拷贝

    1.赋值语句 a = 'abc' b = a print id(a) print id(b) # id(a):29283464 # id(b):29283464 通过简单的复制,我们可以看到,a b其 ...

  10. 16.python中的浅拷贝和深拷贝

    在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b

随机推荐

  1. bitset归结,一个实例

    我是蒟蒻一名,请大佬勿喷. 绝大部分来自https://www.cnblogs.com/magisk/p/8809922.html   ,  可以去大佬博客逛一逛 bitset是C++中类似数组的一种 ...

  2. unique(去重函数)

    去重排序(unique函数的使用) 2013年05月30日 11:05:45 阅读数:9689更多 个人分类: 字符串处理  出处:http://www.cnblogs.com/QQbai/archi ...

  3. min-element & max_element

    C++ STL之min_element()与max_element()(取容器中的最大最小值) min_element()和max_element 头文件:#include<algorithm& ...

  4. VINS 回环检测与全局优化

    回环检测 VINS回环检测与全局优化都在pose_graph.cpp内处理.首先在pose_graph_node加载vocabulary文件给BriefDatabase用,如果要加载地图,会loadP ...

  5. c# 遍历 Mysql 所有表所有列,查找目标数据

    在 Mysql 的 information_schema 库中 COLUMNS 表中存放了所有表的所有列. using MySql.Data.MySqlClient; using System; us ...

  6. Using-JSONNET-for-dynamic-JSON-parsing

    原文 https://weblog.west-wind.com/posts/2012/Aug/30/Using-JSONNET-for-dynamic-JSON-parsing With the re ...

  7. create-react-app创建项目后,运行npm run eject报错解决方法

    运行npm run eject报错解决方法 主要问题是脚手架添加.gitgnore文件,但是却没有本地仓库,使用以下命令操作以下就可以了 git init git add . git commit - ...

  8. Java compiler level does not match the version of the installed Java project facet错误

    出现问题情景:从其他地方导入一个项目的时候报错:Java compiler level does not match the version of the installed Java project ...

  9. 【记录】Mybatis-Generator 数据层代码生成器,自动生成dao类,mapper,pojo类

    Mybatis-Generator 工具来帮我们自动创建pojo类.mapper文件以及dao类并且会帮我们配置好它们的依赖关系. 官方文档地址:http://mybatis.org/generato ...

  10. Linux帮助用法

    内部命令: help COMMAND 或 man bash 外部命令: (1) COMMAND --helpCOMMAND -h(2) 使用手册(manual)man COMMAND(3) 信息页in ...