深浅拷贝:
浅拷贝:
拷贝到最外层:直接赋值、切片赋值
>>> list_1 = [1,2,3,4]
>>> list_2 = list_1
>>> list_2
[1, 2, 3, 4]
>>> list_1[1] = 'a'
>>> list_1
[1, 'a', 3, 4]
>>> list_2
[1, 'a', 3, 4]
>>> list_3 = [1,2,3,['a','b']]
>>> list_4 = list_3[:]
>>> list_4
[1, 2, 3, ['a', 'b']]
>>> list_3[0] = 'c'
>>> list_3
['c', 2, 3, ['a', 'b']]
>>> list_4
[1, 2, 3, ['a', 'b']]
>>> list_3[3][1] = 'ww'
>>> list_3
['c', 2, 3, ['a', 'ww']]
>>> list_4
[1, 2, 3, ['a', 'ww']]
深拷贝:
由外到内全部拷贝
>>> import copy
>>> list_5 = copy.deepcopy(list_3)
>>> list_5
['c', 2, 3, ['a', 'ww']]
>>> list_5[3][0] = 99
>>> list_3
['c', 2, 3, ['a', 'ww']]
>>> list_5
['c', 2, 3, [99, 'ww']]
字典:
- 字典以键值对形式存在:{key:value}
- key值会进行hash运算,生成hash表,所以字典的访问效率要优于普通序列数据类型(列表,元组)
- key值由于需要通过hash,所以一些可变的数据类型不可以做key值,而value值没有限制,可以是任意数据类型
- 由于进行了hash运算,所以字典在内存中的存储是无序的,不能进行索引和切片之类的有序操作
- 字典是可变的数据类型
创建方式:
- 大括号包裹键值对:
>>> mydict = {1:'a',2:'b'}
>>> mydict
{1: 'a', 2: 'b'}
>>> mydict[1]
'a'
2.工厂方法创建:
>>> mydict_1 = dict(([1,'a'],[2,'b']))
>>> mydict_1[1]
'a'
>>> mydict_1
{1: 'a', 2: 'b'}
3.字典内建方式,这是批量创建key值,但是不能单独分配value值
>>> mydict_2 = dict.fromkeys([1,2,3,4,5],'a')
>>> mydict_2
{1: 'a', 2: 'a', 3: 'a', 4: 'a', 5: 'a'}
访问字典:
获得所有的key值:dict.keys()
>>> mydict_2.keys()
dict_keys([1, 2, 3, 4, 5])
获得所有的value值:dict.values()
>>> mydict_2.values()
dict_values(['a', 'a', 'a', 'a', 'a'])
通过key值获取value:dict[key]
>>> mydict_2[2]
'a'
迭代获取其中的key值或value值
>>> for var in mydict_2.keys():
... print(var)
...
1
2
3
4
5
>>>
>>> for var in mydict_2:
... print(var)
...
1
2
3
4
5
>>> for var in mydict_2.values():
... print(var)
...
a
a
a
a
a
>>> for var in mydict_2:
... print(mydict_2[var])
...
a
a
a
a
a