网站数据库连接错误,凡科网商城是正规网站吗,威海人才招聘网官网,天津seo排名费用首先分享Python里面的数据类型1、不可变类型#xff1a;Number(数字)、String(字符串)、Tuple(元组)。不可变数据类型在第一次声明赋值的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值,  而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内…首先分享Python里面的数据类型1、不可变类型Number(数字)、String(字符串)、Tuple(元组)。不可变数据类型在第一次声明赋值的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值,  而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了. 所谓不可变就是说, 我们不能改变这个数据在内存中的值, 所以当我们改变这个变量的赋值时, 只是在内存中重新开辟了一块空间, 将这一条新的数据存放在这一个新的内存地址里, 而原来的那个变量就不在引用原数据的内存地址而转为引用新数据的内存地址了.如图In [11]: a  1 #int为不可变类型赋值In [12]: id(a) #查看a地址Out[12]: 4541615920In [13]: id(1) #查看数字1的地址Out[13]: 4541615920In [14]: a  2 #为a重新赋值In [15]: id(a) #查看a地址指向新的内存地址Out[15]: 4541615952In [16]: id(2)Out[16]: 4541615952In [17]: id(1)Out[17]: 4541615920In [28]: a  hello #为a赋值 helloIn [29]: b  a #将a赋值给aIn [30]: id(a)Out[30]: 4572905712In [31]: id(b) #通过查看a和b的地址说明a和b指向同一个地址Out[31]: 4572905712In [32]: b  hi #为b赋值 hiIn [33]: a #查看a未被修改Out[33]: helloIn [34]: id(a) #查看a地址未发生修改Out[34]: 4572905712In [35]: id(b) #查看b指向新的地址说明ba时是将a的引用指向bOut[35]: 4544178736ba直接赋值时,默认是浅拷贝传递对象的引用而已,原始数据若为不可变类型时被赋值的b改变时相当于在内存中重新开辟了一块空间, 将这一条新的数据存放在这一个新的内存地址里, 而原来的那个变量就不在引用原数据的内存地址而转为引用新数据的内存地址了.2、可变类型Set(集合)、List(列表)、Dictionary(字典)。当数据类型对应的变量的值发生改变时它对应的内存地址也会发生改变即当 e  [1,2] 时是e指向列表[1,2]对象而不是将e指向列表[1,2]的地址如图In [10]: e  [1,2]In [11]: id(e)Out[11]: 4408548080In [12]: id([1,2]) #e指向[1,2]对象而不是[1,2]的地址Out[12]: 4408714656In [10]: e  [1,2] #给变量e赋值可变类型列表[1,2]In [11]: id(e) #查看e地址Out[11]: 4408548080In [12]: id([1,2]) #查看列表[1,2]地址Out[12]: 4408714656In [13]: f  e #将e赋值给f两者共享同一个列表[1,2]对象In [14]: id(f) #查看f地址,其实是将c指向于e的引用地址而非列表[1,2]的实际地址Out[14]: 4408548080In [15]: e[0]  11 #通过e修改列表内元素In [16]: eOut[16]: [11, 2]In [17]: f #查看f中对应元素同样被修改验证e和f指向一个引用对象说明fe时是将e的对象的地址指向fOut[17]: [11, 2]f  e直接赋值时,默认是浅拷贝传递对象的引用而已,原始数据e若为可变类型发生变化被赋值的f也会做相同的改变。3. 浅拷贝浅拷贝是对于一个对象的顶层拷贝通俗的理解是拷贝了引用并没有拷贝内容In [36]: a  [1,2]In [37]: b aIn [38]: id(a)Out[38]: 4573291056In [39]: id(b) #浅拷贝a和b地址相同说明ba是对a引用的拷贝Out[39]: 4573291056通过上面的结果说明当给一个变量赋值时。其实就是讲数据的引用复制了一份给另外一个变量 就是属于简单的浅拷贝In [36]: a  [1,2]In [37]: b aIn [38]: id(a)Out[38]: 4573291056In [39]: id(b)Out[39]: 4573291056In [40]: a[0]  11In [41]: a #a中元素被修改Out[41]: [11, 2]In [42]: b #b中元素被修改Out[42]: [11, 2]通过上面的结果说明通过任何一个引用修改可变变量之后另外一个变量的值也发生了变化。In [24]: g  [2,3]In [25]: h  copy.copy(g) #浅拷贝In [26]: id(g)Out[26]: 4409269536In [27]: id(h)Out[27]: 4408716176In [28]: id([2,3])Out[28]: 4408685824In [30]: id(2) #获取2的地址Out[30]: 4378861392In [31]: id(g[0]) #获取g[0]位置的地址Out[31]: 4378861392In [32]: id(h[0]) #获取h[0]位置的地址Out[32]: 4378861392通过上面的结果说明浅拷贝只是对外层引用的拷贝内层地址一样。In [33]: a  [11,22]In [34]: b  [33,44]In [35]: c [a,b]In [36]: id(a)Out[36]: 4408713536In [37]: id(b)Out[37]: 4408547680In [38]: id(c)Out[38]: 4408615712In [39]: d  copy.copy(c) #对c进行浅拷贝得到dIn [40]: id(d) #查看d地址Out[40]: 4409421248In [41]: id(d[0]) #查看d[0]位置元素地址与a地址相同说明只进行外层拷贝Out[41]: 4408713536In [42]: id(d[1]) #查看d[1]位置元素地址与b地址相同说明只进行外层拷贝Out[42]: 4408547680In [43]: a.append(55) #给a列表添加元素In [44]: c #查看c中元素也发生变化Out[44]: [[11, 22, 55], [33, 44]]In [45]: d #查看d中元素也发生变化说明是对外层的拷贝Out[45]: [[11, 22, 55], [33, 44]]In [46]: d.append(66) #给d中添加元素In [47]: d #查看d中元素发生变化Out[47]: [[11, 22, 55], [33, 44], 66]In [48]: c #查看c中元素未发生变化说明d未外层拷贝Out[48]: [[11, 22, 55], [33, 44]]通过上面的结果说明浅拷贝只是对外层引用的拷贝内层地址一样修改外层拷贝的新对象不会发生变化修改内层元素拷贝的新对象会发生变化。4. 深拷贝深拷贝是对于一个对象所有层次的拷贝(递归), 所以原始对象的改变不会造成深拷贝里任何子元素的改变In [61]: a  [11,22]In [62]: b  [33,44]In [63]: c [a,b]In [64]: cOut[64]: [[11, 22], [33, 44]]In [65]: d  copy.deepcopy(c) #深拷贝得到dIn [66]: dOut[66]: [[11, 22], [33, 44]]In [67]: f  copy.copy(c) #浅拷贝得到fIn [68]: fOut[68]: [[11, 22], [33, 44]]In [69]: a.append(55) #a中添加元素55In [70]: d #深拷贝的d中没有修改说明是对内层也进行copyOut[70]: [[11, 22], [33, 44]]In [71]: f #浅拷贝的f中发生变化说明是只对外层进行了copyOut[71]: [[11, 22, 55], [33, 44]]