python 列表和字典的引用与复制(copy)

列表或字典的引用:

引用针对变量的时候,传递引用后,对引用后的对象的值进行改变是不会影响到原值的;而列表不一样如:

spam =42

cheese = spam

spam =100

print(spam)      #out:100

print(cheese)   #out:42

如果对列表进行引用会是什么情况呢,我们来看看

spam = [0,1,2,3,4,5]
cheese = spam
print(spam)
cheese[1] = ‘hello‘
print(spam)
print(cheese)

out:

[0, 1, 2, 3, 4, 5]
[0, ‘hello‘, 2, 3, 4, 5]
[0, ‘hello‘, 2, 3, 4, 5]

结果我们发现cheese 是引用的spam的,我们改变cheese之后 spam的值也跟着改变了;这个就跟我们当初学的C语言一样;列表的引用其实就是相当于把前面一个列表的地址同时给了一个新的列表用。结果这两个列表都指向了同一地址而这个地址里面本身就只能存放一组数据,不管是对这两个列表谁进行操作都会把这个地址中的数据重新更新;也因此列表可以用来形参的传递来改变实参的值,而变量不同,变量的形参传递是不会改变实参的值的;

def eggs(somePrameter):
  somePrameter.append(‘Hello‘)

def trees(somename):
   somename+=‘Hello‘
   print(‘形参值:‘+somename)

spam = [0,1,2,3]
treename = ‘梧桐‘
eggs(spam)
trees(treename)
print(spam)
print(‘实参值:‘+treename)

out:

形参值:梧桐Hello
[0, 1, 2, 3, ‘Hello‘]
实参值:梧桐

列表或字典的复制

在处理列表和字典时,尽管传递引用常常是最方便的方法,但如果函数修改了传入的列表和字典,你可能不希望这些变动影响到原来的列表或字典。要做到这一点,Python提供了copy的模块,其中包含copy()和deepcopy()函数。第一个函数copy.copy(),可以用来复制列表或字典这样的可变值,而不是复制引用.注意这需要用到copy模块,因此要import copy

如上示例做些许更改所示:

import copy
spam = [0,1,2,3,4,5]
cheese = copy.copy(spam)
print(spam)
cheese[1] = ‘hello‘
print(spam)
print(cheese)

out:

[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5]
[0, ‘hello‘, 2, 3, 4, 5]

原文地址:https://www.cnblogs.com/tinglele527/p/11772604.html

时间: 2024-11-10 13:58:30

python 列表和字典的引用与复制(copy)的相关文章

python列表、字典、字符串常用操作

Python 列表.字典.字符串常用操作 1.字符串操作 字符串可以通过下标取值,但由于字符串是不可变变量,不可通过下标来修改值. str = 'lily terry mark' name[0]    #获取第1个字符串值 name[0:7]   #获取第1~7的字符串值 name[:7]   #缺省开始位置,默认从第1个元素开始取值 name[0:]   #缺省结束位置,默认到字符串末尾结束 字符串包含判断操作符:in .not in .is 'lily' in names 'lily' no

Python 列表\集合\ 字典推导式、生成器表达式

Python 列表\集合?字典推导式.生成器表达式 列表推导式 循环模式 l1 = [i for i in range(1,11)] l2 = [i ** 2 for i in range(100)] l3 = [f'python{i}' for i in range(50)] 筛选模式: l1 = [i for i in range(1,31) if i % 3 == 0] 嵌套循环: names = [['tom','billy','jefferson'],['wesley','steven

python 列表,字典,元组,字符串,常用函数

飞机票 一.列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串"abc"中包含3个元组),相当于ls和object合并.注意:object如果是整型,必须以列表的方式传入,不可以以整型或元组的方式传入 2.ls.append(object) 将object作为一个整体插入到ls最后,object可以是字符串,元组,列表和字典 3.ls.insert(index, object) 将object作为一个

python 列表构造时的引用问题

以前老是不注意python对象引用,平时也没遇到这样的问题,昨天在这个小问题纠结了半天时间.真是TMD啊 先说明一下我的目的,我有一个包含16个元素的列表,每个元素也是一个小列表.我想每四个子列表为一个单位,改变每个子列表的第一个元素为我想要的值. 代码如下 >>>a = range(1,5) >>>b = [[0]*3]*16 >>>for i in range(4):    each = b[i*4:(i+1)*4]    for item in

python 列表,字典,元组(九)

列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起

Python列表和字典的方法总结

列表方法: 方法 说明 append( item ) 在列表末尾插入(item ) count( element ) 返回element在列表中出现的次数 extend( newlist ) 将newlist的元素插入列表末尾 index( element ) 返回element在列表中的索引,如果不存在,则引发ValueError异常 insert( index , item ) 在index位置插入item pop( [index] ) index参数为可选的.如无参调用,则会删除并返回列表

第5课 python列表和字典

到今日,已经去到python的 第5课了,是不是很激动,已经对Python产生兴趣了,感觉python人家说胶水语言,比其他语言都简单,我还是觉得学习python 再去学其他可能会更加高效. 今日我们来学习 列表 和 字典.这2个东西跟之前说的3数据类型有什么区别(字符串,整数int,浮点数float)有什么关系?这个还真是别疑惑.我们从变量这块去说吧. name = "samly71" #### 这个name赋值 字符串 samly71 这串: number = 111 #### n

python 列表转为字典的两个小方法

1.现在有两个列表,list1 = ['key1','key2','key3']和list2 = ['1','2','3'],把他们转为这样的字典:{'key1':'1','key2':'2','key3':'3'} >>>list1 = ['key1','key2','key3'] >>>list2 = ['1','2','3'] >>>dict(zip(list1,list2)) {'key1':'1','key2':'2','key3':'3'}

Python - 列表与字典相互转换

字符串转列表 s = 'abc' a = list(s) ['a','b','c'] 列表转为字符串 ''.join(a) 字符串转换为元组 s='abc' t = tuple(s) 元组转换为字符串 ''.join(t) 列表转换为元组 l = ['a','b','c'] tuple(l) 元组转换为列表 t = ('a','b','c') list(t) ['a','b','c'] 字典转换为列表 dic={'a':1,'b':2} dic.items() [('a',1),('b',2)]