自定义在列表头部添加元素的方法,即insert_head 方法

class Mylist(list):
    def insert_head(self, n):
        # 下面这种方法是不可行的,在这个方法中insert_head(2)的结果就是[3, 4, 5]
        # L = [n]  # 开辟了新的对象空间
        # for x in self:
        #     L.append(x)
        # print(L)
        # self = L
        # print(self)  

#return self

# 因为这里返回的对象和原来myl指向的对象是不一样的,myl.insert_head(2) 不是赋值语句,
        # 因此myl不会指向(绑定)所返回的对象([2,3,4,5]),而是指向[3,4,5]这个对象(地址)

        # 下面两种方式是可行的,它们都是在原对象插入新的元素,然后myl绑定的对象不变
        # self[0:0] = [n]  # 用切片头插
        self.insert(0, n)

myl = Mylist(range(3, 6))
print(myl)

myl.insert_head(2)  # [2, 3, 4, 5]
print(myl)

myl.append(6)
print(myl)

总结在变量和对象的等号赋值过程中,内存中将新开辟内存空间存储这个对象,然后(当变量原本指向一个变量时)变量指向的是新的内存空间

猜你喜欢

转载自www.cnblogs.com/thejie/p/10029954.html