Чтобы начать, это код, который я хотел использовать, чтобы представить мою проблему в упрощенном виде, но оказывается, что он действительно работает, поскольку я изначально ожидал, что вещь, чтобы работать:Выполнение копирования списка содержимого через добавление, а не содержащее ссылку
list_a = []
list_b = []
for i in range(2):
list_a = [i, i+1]
list_b.append(list_a)
Теперь list_b
является [[0, 1], [1, 2]]
, как я хочу, чтобы это было.
Я пытаюсь изучить программирование, сделав простой клон Tetris с pygame, и я хотел использовать аналогичный подход для разбора текстового файла в список, содержащий вращения/кадры одного блока (2d-списки). Я заполняю 2d frame
, добавьте его в frames
, который является списком всех кадров, а затем повторно используйте frame
. Однако, в отличие от вышеприведенного примера, кажется, что когда frame
прилагается к frames
, это не содержимое frame
, а ссылка на frame
(хотя это, вероятно, не правильный термин?). Что по этому поводу отличается от того, что оно ведет себя по-другому, и как я могу заставить его работать? Заранее спасибо!
class Block:
object = {}
def __init__(self, block_type):
frame = [[0 for i in range(4)] for i in range(4)]
frames = []
frames_file = open('files\\%s.txt' % block_type, 'r')
for i, line in enumerate(frames_file):
if line.strip() == '----':
frames.append(frame)
print(frame)
print(frames)
print('Append!\n')
else:
for x, char in enumerate(line.strip()):
y = i % 5
if char == '#':
frame[x][y] = 1
elif char == '.':
frame[x][y] = 0
self.frame = frames
Block.object['T'] = Block('T')
Теперь все frame
s содержат то же самое:
>>> Block.object['T'].frame[0] == Block.object['T'].frame[1]
True
Просто для записи, files\T.txt
является:
....
###.
.#..
....
----
.#..
##..
.#..
....
----
.#..
###.
....
....
----
.#..
.##.
.#..
....
----