Python面试问题整理[快速排序、copy和deep copy]

算法

  • 快速排序
#!/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)

基础

  • copy和deepcopy区别
#!/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只会复制一层;deepcopy会对每一层(嵌套)都复制,此时deepcopy出来的对象已经不是原来的对象了,虽然实际上会共享不可变的子对象,但不影响它们的相互独立性;
当最外层对象为可变类型时,copy后得到的对象指向新的内存空间,当最外层的对象为不可变类型时,copy后得到的对象指向原对象的内存空间。
赋值:简单地拷贝对象的引用,两个对象的id相同。

猜你喜欢

转载自blog.csdn.net/tmaccs/article/details/81323407