Python面接問題整理[クイックソート、copy、deep copy]
3702 ワード
アルゴリズム#アルゴリズム#クイックソート
きそ copyとdeepcopyの違い
copyは1層しかコピーできません.deepcopyは各レイヤ(ネスト)をコピーします.このときdeepcopyから出てくるオブジェクトは元のオブジェクトではありません.実際には可変のサブオブジェクトを共有しますが、相互独立性には影響しません.最外層オブジェクトが可変タイプの場合、copy後に得られるオブジェクトは新しいメモリ空間を指し、最外層オブジェクトが可変タイプの場合、copy後に得られるオブジェクトは元のオブジェクトのメモリ空間を指す.付与:オブジェクトの参照を簡単にコピーし、2つのオブジェクトのidが同じです.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: Yang hengyu
# date: 2018-07-31
def quick_sort(list_in):
if not isinstance(list_in, list):
return u' '
if len(list_in) <= 1:
return list_in
list_a = []
list_b = []
#
mark_num = list_in.pop()
for num in list_in:
if num < mark_num:
list_a.append(num)
else:
list_b.append(num)
return quick_sort(list_a) + [mark_num] + quick_sort(list_b)
if __name__ == '__main__':
a = [3, 45, 5, 3, 2, 8, 9, 52, 5]
print quick_sort(a)
きそ
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: Yang hengyu
# date: 2018-07-31
import copy
a = [1, 2, 3]
b = [1, 2, [1, 2, 3]]
aa = copy.copy(a)
bb = copy.copy(b)
deep_aa = copy.deepcopy(a)
deep_bb = copy.deepcopy(b)
a[0] = '1'
b[2][0] = '2'
print aa, bb
print deep_aa, deep_bb
# :
[1, 2, 3] [1, 2, ['2', 2, 3]]
[1, 2, 3] [1, 2, [1, 2, 3]]
copyは1層しかコピーできません.deepcopyは各レイヤ(ネスト)をコピーします.このときdeepcopyから出てくるオブジェクトは元のオブジェクトではありません.実際には可変のサブオブジェクトを共有しますが、相互独立性には影響しません.最外層オブジェクトが可変タイプの場合、copy後に得られるオブジェクトは新しいメモリ空間を指し、最外層オブジェクトが可変タイプの場合、copy後に得られるオブジェクトは元のオブジェクトのメモリ空間を指す.付与:オブジェクトの参照を簡単にコピーし、2つのオブジェクトのidが同じです.