В отличие от других языков, имеющих переменную и значение, у Python есть имя и объект.
Этот оператор:
a = [1,2,3]
означает присвоение списку (объекту) имени a
, и это:
b = a
просто дает тому же объекту a
новое имя b
, поэтому всякий раз, когда вы что-то делаете с a
, объект изменяется, и поэтому b
изменяется .
Единственный способ сделать действительно копию a для создания нового объекта, как и другие ответы, уже сказал.
Вы можете увидеть больше об этом здесь .
Я был заинтригован этим вопросом, потому что я никогда не думал об этом. Я искал код list.sort
, чтобы посмотреть, как это делается, но , по-видимому, он находится в C . Думаю, я вижу, к чему ты клонишься; что, если нет метода super
для вызова? Затем вы можете сделать что-то вроде этого:
class Table(list):
def pop_n(self, n):
for _ in range(n):
self.pop()
>>> a = Table(range(10))
>>> a.pop_n(3)
>>> print a
[0, 1, 2, 3, 4, 5, 6]
Вы можете вызвать методы self
, назначить индексы self
и все, что еще реализовано в своем классе (или что вы реализовать себя ).
Python всегда проходит по значению. Это означает, что назначение параметра никогда не будет влиять на внешнюю сторону функции. self
- это просто имя, которое вы выбрали для одного из параметров.
.__setitem__()
) объекта, на который указывает эта переменная.
– newacct
4 September 2013 в 08:49
Вы не можете повторно назначить self
из метода и ожидать, что он изменит внешние ссылки на объект.
self
- это просто аргумент, передаваемый вашей функции. Это имя указывает на экземпляр вызова метода. «Назначение self
» эквивалентно:
def fn(a):
a = 2
a = 1
fn(a)
# a is still equal to 1
Присвоение self
изменяет то, на что указывает имя self
(от одного экземпляра Table
до нового экземпляра Table
здесь ). Но все. Он просто меняет имя (в рамках вашего метода) и влияет не на базовый объект, а на другие его имена (ссылки).
Просто выполните поиск на месте с помощью list.sort
:
def sort(self, in_col_name):
super(Table, self).sort(key=lambda x: x[in_col_name])
list.sort
здесь, используя super
. Вместо этого мы вызывали Table.sort
, что не поддерживает его, потому что мы его не реализовали.
– Thomas Orozco
3 September 2013 в 21:04
list.sort
довольно сложно найти!;))
– Thomas Orozco
3 September 2013 в 21:09