Неглубокая копия создает новый составной объект и вставляет его ссылки в исходный объект.
В отличие от мелкой копии, deepcopy создает новый составной объект, а также вставляет копии исходных объектов исходного составного объекта .
Давайте возьмем пример.
import copy
x =[1,[2]]
y=copy.copy(x)
z= copy.deepcopy(x)
print(y is z)
Выше кода печатает FALSE.
Посмотрим, как.
Оригинальный составной объект x=[1,[2]]
(называемый соединением, поскольку он имеет объект внутри объекта (начало))
, как вы можете видеть на изображении, есть список внутри list.
Затем мы создаем мелкую копию с помощью y = copy.copy(x)
. Что здесь делает python, он создаст новый составной объект, но объекты внутри них будут указывать на объекты orignal.
На изображении у него есть создала новую копию для внешнего списка. но внутренний список остается таким же, как и исходный.
Теперь мы создаем его глубокую копию, используя z = copy.deepcopy(x)
. то, что здесь делает python, он создаст новый объект для внешнего списка, а также для внутреннего списка. как показано на изображении ниже (красный выделен).
В конце кода печатается False
, так как y и z не являются одними и теми же объектами.
HTH.
Если вы добавите 0 дней, ваше «если» будет выглядеть так:
if(bday>now && bday<now)
это «если» всегда будет ложным.
Первое выражение дисквалифицирует второе.
bday > DateTime.Now
ложно, поскольку DateTime.Now
включает время дня, тогда как bday - нет. Попробуйте это:
DateTime bday = Convert.ToDateTime("03-05-2019");
int years = DateTime.Now.Year - bday.Year;
bday = bday.AddYears(years);
DateTime check = DateTime.Now.AddDays(0);
if ((bday >= DateTime.Now.Date) && (bday<check))
{
lblFødselsdag.Text = ("You have birthday");
}
else
{
lblFødselsdag.Text = ("No birthday");
}
Или просто сравните год и месяц в соответствии с предложением @bassfader:
if (DateTime.Now.Day == bday.Day && DateTime.Now.Month == bday.Month) { ... }