一、概念引入 在高级语言中,变量是对内存及其地址的抽象。 对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身。 引用语义:在python中,变量保存的是对象(值)的引用,我们称为引用语义。采用这种方式,变量所需的存储空间大小一致,因为变量只是保存了一个引用。也被称为对象语义和指针语义。 值语义:有些语言采用的不是这...
深浅拷贝特别说明:1. 浅拷贝只拷贝一层,后面就是共享了。2. 例如[ [1,2,3] ,4,5,6 ],在这个嵌套列表中,小列表[1,2,3]就是一块共享的内存空间,它不是存储地址,所以你浅拷贝过来的数据对小列表即共享内存空间进行了数据修改,那么,之前的源数据也会被修改。因为修改了共 享内存空间的数据, 就相当于修改了源数据在内存中的指针方向。 3.深拷贝相当于克隆一份。浅拷贝实例一:a = [1,‘alex‘,‘alvi...
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。下面本文就通过简单的例子介绍一下这些概念之间的差别。对象赋值直接看一段代码:will = ["Will", 28, ["Python", "C#", "JavaScript"]]
wilber = will
print id(will)
print will
print [id(ele) for ele in will]
print id(wilber)
print wilber
print [id(ele) for ele in wilber]will[0] = "Wilber"
will[2].append("CSS...
一、循环列表,删除其中的元素l1 = [1,2,3,4,5,6,7] 循环删除奇数位元素1.正序循环删除,会出现越界情况,所以采用倒叙的方式删除1 l1 = [1,2,3,4,5,6,7]
2for i in range(len(l1) - 1,-1,-1):
3if i % 2 == 1:
4 l1.pop(l1[i])
56print(l1)二、循环字典,删除其中的元素如果循环删除的话,编译器会报 RuntimeError: dictionary changed size during iteration1#错误代码2#dic = {‘k1‘:‘zhangsan‘,‘k2‘:‘lisi‘,‘...
深浅拷贝赋值:将多个变量名指向一个同一个内存地址,有一个操作内存地址的值进行改变,其余的变量名在查看的时候都进行更改浅拷贝:只拷贝第一层元素的地址,只有修改拷贝的数据第一层的时候源数据不受影响给可变数据类型(第二层元素)进行添加的时候源数据会受影响= 是修改 append 是添加可变数据类型能够修改和添加,不可变数据类型只能修改深拷贝:不可变数据类型内存地址共用,可变数据类型新开辟一个空间 不管嵌套多深,不管...
今天写兑换码时,玩家兑换兑换码时,拿到了上个兑换码的奖励,还一直怀疑,mysql取该兑换码那个环节出错了,实际上是直接引用了全局常量里的数据。导致后面全局常量的数据用的是上个兑换码的奖励内容。 今天就来说说前拷贝和深拷贝之分吧!浅拷贝:copy.copy:拷贝内容浅拷贝会生成一个新的对象,但是还是会使用原始数据的引用(地址),对可变类型操作会使用一个新的对象, 对不可变类型操作不会产生新的对象(list,dict,),并修...
python 深浅拷贝不之前一直不太理解,只是概念性的理解像 1,2 所说,敲完下面代码希望你可以理解。1、copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。2. copy.deepcopy 深拷贝 拷贝对象及其子对象>>> import copy
>>> l1 = [1,3,5,[‘a‘,‘b‘,‘c‘]]
>>> a = l1
>>> b = copy.copy(a) # 浅拷贝
>>> c = copy.deepcopy(a) # 深拷贝
>>> l1.append(7)
>>> l1[3].append(‘d‘)
>>> print ‘l1=‘,l1
l1= [1, 3, 5, ...
1.基础数据类型的补充1.元组如果元组中只有一个数据,且没有逗号,则该‘元组’与里面的数据的类型相同。如:1 tu = (1)
2 tu1 = (1,)
3 tu2 = (‘alex‘)
4 tu3 = ([1,2,3],)
5print(tu,type(tu)) # 1 <class ‘int‘>6print(tu1,type(tu1)) # (1,) <class ‘tuple‘>7print(tu2,type(tu2)) # alex <class ‘str‘>8print(tu3,type(tu3)) # ([1, 2, 3],) <class ‘tuple‘>2. 列表列表与列表是可以相加的,如:1 l1 = [1,2,...
一、基本数据类型补充1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = [‘李嘉诚‘,‘何炅‘,‘海峰‘,‘刘嘉玲‘]s = "_".join(li)print(s) # 结果为:李嘉诚_何炅_海峰_刘嘉玲li = ‘黄花大闺女‘s = "_".join(li)print(s) # 结果为:黄_花_大_闺_女2,列表相关: 循环删除列表中的每一个元素,有如下代码,注意结果并分析原因: li = [11,22,33,44]for e in li:li.remove(e)...
首先我们在这里先补充一下基础数据类型的一些知识:一.循环删除 1.前面我们学了列表,字典和集合的一些操作方法:增删改查,现在我们来看一下这个问题:有这样一个列表:
lst = [‘周杰伦‘,‘周润发‘,‘周星驰‘,‘刘德华‘]如果现在要求我们删除带‘周‘的元素,我们下意识会这样做:lst = [‘周杰伦‘,‘周润发‘,‘周星驰‘,‘刘德华‘]
for i in lst:if ‘周‘ in i:lst.remove(i)
print(lst) #[‘周润发‘, ‘刘德华‘]但是结果...
一、浅拷贝常见的浅拷贝的方法,是使用数据类型本身的构造器,比如下面两个例子:list1 = [1, 2, 3]
list2 = list(list1)
print(list2)
print("list1==list2 ?",list1==list2)
print("list1 is list2 ?",list1 is list2)set1= set([1, 2, 3])
set2 = set(set1)
print(set2)
print("set1==set2 ?",set1==set2)
print("set1 is set2 ?",set1 is set2)
运行结果为:[1, 2, 3]
list1==list2 ? True
list1 is list2 ? False
{1, 2, 3}
s...
Python中的对象分为可变与不可变,有必要了解一下,这会影响到python对象的赋值与拷贝。而拷贝也有深浅之别。不可变对象简单说就是某个对象存放在内存中,这块内存中的值是不能改变的,变量指向这块内存,如果要改变变量的值,只能再开辟一块内存,放入新值,再让变量指向新开辟的内存。#定义三个变量
f=22
n=22
z=f
print(‘f=%s,n=%s,z=%s‘ %(f,n,z))
print(‘f的地址:‘,id(f))#id用于获取变量内存地址print(‘n的地址:...
元组比较特殊 1、----元组本身为不可变类型import copyv1 = (1, 2, 3, 4)
v2 = copy.copy(v1)
print(id(v1), id(v2))
v3 = copy.deepcopy(v1)
print(id(v1), id(v3))输出:
31450280 31450280
31450280 31450280小结:元组本身是不可变类型,就像str、int、boor一样,所在在深浅拷贝时,它们的内存地址是一样的。2、----当元组中嵌套可变类型时:v1 = (1, 2, 3, [1, 2, 3], 4)
import copyv2 = copy.copy(v1)
print(id(v1), id(v2)...
在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用一般有三种方法,alist=[1,2,3,["a","b"]] (1)直接赋值,传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变>>> b=alist>>> print b[1, 2, 3, [‘a‘, ‘b‘]]>>> alist.append(5)>>> print alist;print b[1, 2, 3, [‘a‘, ‘b‘], 5][1, 2, 3, [‘a‘, ‘b‘], 5](2)...
1. 基本数据类型补充 s=" ".join(lst) 把列表中的每一项用" "拼接起来,把列表转化成字符串 lst1=s1.split() 用()中的内容切割列表,把字符串转化成列表2. 关于删除 在循环迭代的过程中不能删除 删除的方法: 创建新列表,把想要删除的内容放在列表中,循环新列表,删除原列表 字典在循环中不能增加和删除,可以修改 dict.fromkeys(k, v) 把key迭代.和value组合成k:v创建新字典, 所有的key共享同一个...