Discuss / Python / 不知道对不对

不知道对不对

Topic source

_______祥子

#1 Created at ... [Delete] [Delete and Lock User]
#!/usr/bin/python
# -*- coding:utf-8 -*-
# 切片

""""
切片 L [起始 : 结束 : 方向]

L = list(range(100))
r = L[80 : 20: -10]
print r # [80, 70, 60, 50, 40, 30]

"""

import  copy

"""List"""
# 例子1
L = ["Michale", "Sarah","Tracy", "Bob", "Jack"]

# 取前三个元素
r = L[:3]
print r

# 取第一到第三个元素
r = L[1:3]
print r


# 倒数第二个到最后一个
r = L[-2 :]
print r


# 例子2
L = list(range(100))
print L


# 2.1 取前十个
r = L[:10]
print r

# 2.2 取后十个
r = L[-10 : ]
print  r

# 2.3 取 11- 20
r = L[11:20]
print  r

# 2.4 取前10个,每两个取一个
r = L[:10:2]
print  r

# 2.5 所有数,每五个取一个
r = L[::5]
print r

# 2.6 复制一个list
r = L[:]
print  r


"""tuple"""
r = (1,2,3,4,5)[:3]
print  r

"""字符串"""
str = "abcdefg"
r = str[-4:5]
print r



L = list(range(100))
r = L[80 : 20: -10]
print r


"""
问题:
a=[[1,2,3],4,5,6]
b=a[:]
b[0].pop()

得到:

b
[[1,2],4,5,6]
a
[[1,2],4,5,6]

"""
print "\n 华丽的分割线"
a=[[1,2,3],4,5,6]
b=a[:]
b[0].pop()

print id(a)
print id(b)

print id(a[0])
print id(b[0])

print id(a[1])
print id(b[1])

"""
打印结果:
    4554209760
    4554211128
    4554209832
    4554209832
    140234437186848
    140234437186848

切片之后, 
    a & b的地址不一样,两个对象指向同一块内存地址
    对于a[0] & b[0] 是可变对象,参考【使用dict 和set】一章,a[0] & b[0]指向的是同一块内存地址,所以更改了b[0].pop() 是会影响到a[0]的
    4,5,6 是常量,在内存中存储在"常量区",内存地址一样


"""


print "\n 浅拷贝"
c = copy.copy(a)
print id(a)
print id(c)

print id(a[0])
print id(c[0])

print id(a[1])
print id(c[1])

"""
导入copy模块进行浅拷贝 结果

4554209760
4554211272

4554209832
4554209832

140234437186848
140234437186848

其实结论和切片一直,也就是说 切片其实就是对对象的 浅拷贝,不知道对不对

"""

print "\n 深拷贝"
d = copy.deepcopy(a)
print id(a)
print id(d)

print id(a[0])
print id(d[0])

print id(a[1])
print id(d[1])

"""
     深拷贝
4554209760
4554317904

4554209832
4554317976

140234437186848
140234437186848

里面的可变对象 a[0] & b[0] 都进行了拷贝,指向不同的地址
但是 4,5,6 是常量,在常量区,地址都一样

"""

print "\n 内存存储空间"
e = "abc"
eList = [[1, 2, 3], e]
fList = eList[:]

print  eList
print  fList

print id(eList)
print id(fList)

print id(eList[0])
print id(fList[0])

print id(eList[1])
print id(fList[1])


"""
 内存存储空间
[[1, 2, 3], 'abc']
[[1, 2, 3], 'bcd']
4554318120
4554318192

4554318264
4554318264

4553365704
4554426728


"""

斯人已巳

#2 Created at ... [Delete] [Delete and Lock User]

请问下最后这段代码中: elist 和 flist中的元素应该是相同的吧? 为什么你这个上面是[[1,2,3],'abc']和[[1,2,3],'bcd']呢?


  • 1

Reply