在这篇文章中,我们将归纳一些面试中常见的python基础知识:
浅拷贝:数据半共享(复制其数据独立内存存放,但只针对第一层数据)
l1 = [1,2,3,[11,22,33]]
l2 = l1.copy() # 浅拷贝,只拷贝第一层
print(l2) #[1,2,3,[11,22,33]]
l2[3][2]='aaa' # 数据中的第二层是共享内存的
print(l1) #[1, 2, 3, [11, 22, 'aaa']]
print(l2) #[1, 2, 3, [11, 22, 'aaa']]
l1[0]= 0 # 数据中的第一层是相互独立的,修改时互不影响
print(l1) #[0, 2, 3, [11, 22, 'aaa']]
print(l2) #[1, 2, 3, [11, 22, 'aaa']]
print(id(l1)==id(l2)) #Flase
深拷贝:数据完全不共享(复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享)
import copy
l1 = [1, 2, 3, [11, 22, 33]]
l2 = copy.deepcopy(l1) # 深拷贝
print(l1,'>>>',l2)
l2[3][0] = 1111
print(l1,">>>",l2) # 深拷贝就是彻底地复制了一份全新的变量,它们数据不会互相影响,因为内存不共享
id(object)
a = [1, 2, 3]
b = a[:] # 切片
a[1:] = [] # 切片赋值
# 方法1:
x,y = y,x
# 方法2:
x = x + y
y = x - y
x = x - y
class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
@property修饰的变量可以通过只定义getter方法,不定义setter方法,实现只读属性
原文:https://www.cnblogs.com/lokvahkoor/p/11056361.html