Note_Tech

All technological notes.


Project maintained by simonangel-fong Hosted on GitHub Pages — Theme by mattgraham

Python - Pointer

Back


Pointer


浅拷贝: = and copy()

print("\n--------original list--------")
a = ["string", 42]
print("a", a)    # ["string", 42]


print("\n--------reference--------")
b = a
b[0] = "some words"
print("a", a)    # ['some words', 42]
print("b", b)    # ['some words', 42]


print("\n--------copy list--------")
c = a.copy()
c[0] = "hello!"
print("a", a)     # ['some words', 42]
print("b", b)     # ['some words', 42]
print("c", c)     # ['hello!', 42]

print("\n--------original list--------")
a = [["alex", "beth"]]
print("a", a)    # a [['alex', 'beth']]


print("\n--------copy list--------")
b = a.copy()
b[0].append("charlie")
print("a", a)    # a [['alex', 'beth', 'charlie']]
print("b", b)    # b [['alex', 'beth', 'charlie']]


深拷贝: 使用 deepcopy() 函数

print("\n--------deepcopy()--------")

from copy import deepcopy
a = [["alex", "beth"]]
c = deepcopy(a)
c[0].append("dan")

print('a', a)       # a [['alex', 'beth']]
print('c', c)       # c [['alex', 'beth', 'dan']]

不可变对象(如元组)中的指针

print("\n--------list--------")

b = [42, 'beeblebrox']

b[0] = 63
b[1] = 'beeble'

print(b)        # [63, 'beeble']


print("\n--------tuple--------")

xVar = 'abc'
yVar = [0, 1]
a = (42, 'beeblebrox', xVar, [1, 2], yVar)

# a[0] = 63       # TypeError: 'tuple' object does not support item assignment
# a[1] = 'beeble'     # TypeError: 'tuple' object does not support item assignment
# a[2] = 'beeble'     # TypeError: 'tuple' object does not support item assignment
a[3].append(3)
xVar = 'xyz'
yVar.pop()

print(a)        # (42, 'beeblebrox', 'abc', [1, 2, 3], [0])


Python 中的 immutable 对象

print("\n--------Immutable--------")

xVar = 'abc'
print(id(xVar))

xVar = 'xyz'
print(id(xVar))

# 在内存中的地址不同, 显示xVar先后指向的不是相同的对象.

TOP