1 对于赋值运算,就是共同指向一个内存地址.将一个值赋予一个变量,那么它的内存地址同时也赋予了他,如果值是不可变类型,改变值,就会产生一个新值和新内存地址,
如果值是可变类型那么内存地址不会变.
s1 = 'alex'
s2 = s1
print(s1,id(s1))
print(s2,id(s2))

结果:

当值是可变类型时

s1 = []
s2 = s1
s2.append("a")
print(s1,id(s1))
print(s2,id(s2))
结果:

2 浅层copy 拷贝第一层的数据独立,第二层及以后公用一个内存地址

#copy
l1 = [1,2,3]
l2 = l1.copy()
l1.append(666) #在第一层里添加数据
print(l1,id(l1))
print(l2,id(l2))
l1 = [1,[22,33],2,3]
l2 = l1.copy()
l1[1].append(666) #在第二层添加数据
print(l1,id(l1))
print(l2,id(l2))

结果:

3 深层copy 要引用模块  import copy  对于深copy,无论多少层,在内存中都是两个独立的内存地址

import copy
l1 = [1,[22,33,],2,3]
l2 = copy.deepcopy(l1)
l1.append(777)
l1[1].append(666)
print(l1,id(l1),id(l1[1]))
print(l2,id(l2),id(l2[1]))

结果:

4 面试题

l1 = [1,[1,2],2,3]
l2 = l1[:] # 是浅copy
l1[1].append(111)
print(l1,l2)
#l2 是什么?

结果:

5 在列表循环过程中,如果删除数据,可能会报错,举例:

将下列数据中奇数位删掉

#方法一:
l1 = [111,222,333,444,555] # 删掉奇数就是保留偶数,将偶数数据找到,建个新列表代替原来列表
l2 = []
for i in range(len(l1)):
if i % 2 == 0:
l2.append(l1[i])
l1 = l2
print(l1) #方法二:
l1 = [111,222,333,444,555,666,777] # 通过切片的步长删掉奇数数据
del l1[1::2]
print(l1)
#方法三
l1 = [111,222,333,444,555] # 将索引倒序找奇数位 这样删掉数据就不会影响前面元素的索引
for i in range(len(l1)-1,-1,-1):
if i % 2 == 1:
del l1[i]
print(l1)

结果:

6  字典在循环过程中,如果删掉数据也会报错

dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
#不可变的数据类型:可哈希
# for i in dic:
# if 'k' in i:
# del dic[i]
print(dic)

结果:  在迭代过程中字典大小改变

对应方法dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}

l1 = []
for i in dic:
if 'k' in i:
l1.append(i) for k in l1:
del dic[k]
print(dic)

结果;  在字典循环中不能改变字典,但是新建个列表,把要删除的数据放到列表里,在循环列表,再循环列表过程中修改字典就不会报错.

7 数据类型转换   元祖变列表list(tuple)   列表变元祖 tuple(list)

#tuple <---> list
l1 = [1,2,3]
tu = tuple(l1) #将列表换成元祖
l2 = list(tu) #将元祖变成列表
print(tu,l2)

结果:

字典专属类型转换  可以变列表,元祖 但是元祖是不可变类型 一般转换成列表

dic = {'k1':'alex','k2':'太白','k3':'日天','name':'wusir'}
print(list(dic.keys()))
print(list(dic.values()))
print(list(dic.items()))

结果:

8 集合

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。

以下是集合最重要的两点:

  去重,把一个列表变成集合,就自动去重了。

  关系测试,测试两组数据之前的交集、差集、并集等关系。

9 集合的增。

set1 = {'alex','wusir','ritian','egon','barry'}
set1.add('景女神')
print(set1) #update:迭代着增加
set1.update('景女神')
print(set1)

结果:

10 集合的删。

set1 = {'alex','wusir','ritian','egon','barry'}

set1.remove('alex')  # 删除一个元素
print(set1) set1.pop() # 随机删除一个元素
print(set1) set1.clear() # 清空集合
print(set1) del set1 # 删除集合
print(set1)

结果:

11 集合的交 并,反交 差集,超集和子集

交集   (&  或者 intersection)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2) # {4, 5}
print(set1.intersection(set2)) # {4, 5}

结果:

并集。(| 或者 union)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7} print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7}

结果:

差集。(- 或者 difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2) # {1, 2, 3}
print(set1.difference(set2)) # {1, 2, 3}

结果:

反交集。 (^ 或者 symmetric_difference)

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}

结果:

子集与超集

set1 = {1,2,3}
set2 = {1,2,3,4,5,6} print(set1 < set2)
print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。 print(set2 > set1)
print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。

结果:

frozenset不可变集合,让集合变成不可变类型。把一个可迭代的元素添加到集合 如果有重复元素,自动删掉.

s = frozenset('barry')
print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

结果:


												

最新文章

  1. 微软.NET Core RC2正式发布,横跨所有平台
  2. 在linux平台实现atosl
  3. 封装tip控件
  4. Java IO8:IO简单总结
  5. 架构模式对象与关系结构模式之:标识域(Identity Field)
  6. JAVA IO NIO
  7. 点击空白处隐藏div
  8. android开发调用c++共享库so文件
  9. 第三章 Android绘图机制与处理技巧
  10. Android 匿名共享内存Java接口分析
  11. 正则表达式之match与exec【转的 楼兰之风】
  12. 十天学Linux内核之第六天---调度和内核同步
  13. C++版 - 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面
  14. virtual-dom
  15. 基础项目构建,引入web模块,完成一个简单的RESTful API 转载来自翟永超
  16. 带你使用JS-SDK自定义微信分享效果
  17. 【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)
  18. 24.Hibernate-各种类型的查询.md
  19. float double 如何存储
  20. rancher2 HA部署注意事项

热门文章

  1. leetcode230
  2. delphi 蓝牙 TBluetoothLE
  3. 部署和调优 3.2 dns安装配置-2
  4. maven 配置说明
  5. spring 的aop操作
  6. 15-struct(构造函数,重载)
  7. Linux wine
  8. 101334E Exploring Pyramids
  9. Python程序设计3——字典
  10. 面试经常问的一个问题:final、finalize、finally